# RightCustomContainer

> Gets the right-aligned VisualElement container on the right side of this HierarchyViewItem.

## Definition

* **Type:** Property
* **Namespace:** [Unity.Hierarchy](/engine/6000.7/script-reference/unity/hierarchy.md)
* **Assembly:** UnityEngine.HierarchyModule

```csharp
public VisualElement RightCustomContainer { get; }
```

### Remarks

The following example adds a button next to a GameObject in the Hierarchy window if that GameObject is a prefab instance. You can select the button to locate and highlight the prefab asset in the **Project** window. It uses `RightCustomContainer` to host the button.

The example requires a USS file called `PrefabActionButtons.uss`. To use this example, save the script and USS file in a folder called `Assets/Editor/PrefabActionButtons`. Scripts in an `Editor` folder can use the Hierarchy module API without additional setup. If you save the script outside of an `Editor` folder, you must enable the Hierarchy built-in module in the **Package Manager** window, which also adds the module to your Player builds.

```csharp
using Unity.Hierarchy;
using Unity.Hierarchy.Editor;
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;

namespace Unity.HierarchySamples.Editor
{
    class PrefabActionButtons
    {
        const string k_PingButtonClassName = "prefab-ping-button";
        const string k_PingButtonText = "\u25B6";

        [InitializeOnLoadMethod]
        static void Initialize()
        {
            HierarchyWindow.BindView += OnBindView;
            HierarchyWindow.BindViewItem += OnBindViewItem;
            HierarchyWindow.UnbindViewItem += OnUnbindViewItem;
        }

        static void OnBindView(HierarchyWindow window, HierarchyView view)
            => view.styleSheets.Add(AssetDatabase.LoadAssetAtPath<StyleSheet>("Assets/Editor/PrefabActionButtons/PrefabActionButtons.uss"));

        static void OnBindViewItem(HierarchyWindow window, HierarchyView view, HierarchyViewItem item)
        {
            if (item.Handler is not HierarchyGameObjectHandler handler)
                return;

            GameObject gameObject = handler.GetGameObject(item.Node);

            if (!PrefabUtility.IsPartOfPrefabInstance(gameObject))
                return;

            GameObject prefabRoot = PrefabUtility.GetOutermostPrefabInstanceRoot(gameObject);
            GameObject prefabAsset = PrefabUtility.GetCorrespondingObjectFromSource(prefabRoot);

            if (prefabAsset == null)
                return;

            Button pingButton = new Button(() => EditorGUIUtility.PingObject(prefabAsset))
            {
                text = k_PingButtonText,
                tooltip = "Ping Prefab Asset in Project Browser"
            };
            pingButton.AddToClassList(k_PingButtonClassName);

            item.RightCustomContainer.Add(pingButton);
        }

        static void OnUnbindViewItem(HierarchyWindow window, HierarchyView view, HierarchyViewItem item)
        {
            // Remove the button so it doesn't persist when this item is rebound.
            UQueryBuilder<Button> pingButtons = item.RightCustomContainer.Query<Button>(className: k_PingButtonClassName);
            pingButtons.ForEach(button => button.RemoveFromHierarchy());
        }
    }
}
```

The following example shows how to style `PrefabActionButtons.uss`.

```csharp
.prefab-ping-button {
    width: 16px;
    height: 16px;
    font-size: 8px;
    padding-bottom: 4px;
    margin-left: 2px;
    margin-right: 2px;
    -unity-text-align: middle-center;
}
```
