# GenericDropdownMenu

> GenericDropdownMenu allows you to display contextual menus with default textual options or any VisualElement.

## Definition

* **Type:** Class
* **Namespace:** [UnityEngine.UIElements](/engine/6000.0/script-reference/unityengine/uielements.md)
* **Assembly:** UnityEngine.UIElementsModule

```csharp
public class GenericDropdownMenu
```

## Remarks

The GenericDropdownMenu is a generic implementation of a dropdown menu that you can use in both Editor UI and runtime UI.

The following example creates a dropdown menu with three items. It displays the menu when the user clicks the button. The example also demonstrates how to set the width of the dropdown menu with the `DropDown` method.

## Examples

```csharp
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;

public class MenuExample : EditorWindow
{

    [MenuItem("Window/UI Toolkit/MenuExample")]
    public static void ShowExample()
    {
        MenuExample wnd = GetWindow<MenuExample>();
        wnd.titleContent = new GUIContent("MenuExample");
    }
    public void CreateGUI()
    {
        VisualElement root = rootVisualElement;

        // Create a button.
        var button = new Button();
        button.text = "Button";
        button.style.width = 70;

        // Create a dropdown menu with three items.
        var menu = new GenericDropdownMenu();
        menu.AddItem("Item 1", false, a => { Debug.Log("Item 1 was selected"); }, null);
        menu.AddItem("Item 2", false, a => { Debug.Log("Item 2 was selected"); }, null);
        menu.AddItem("Item 3 has a very very long label", false, a => { Debug.Log("Item 3 was selected"); }, null);

        // When the button is clicked, the dropdown menu is displayed aligned with the button's world boundaries.
        button.clicked += () =>
        {
            // The third and the fourth parameters of the DropDown set the width of the dropdown menu.
            // This sets the width of the dropdown menu to the width of the container.
            menu.DropDown(button.worldBound, button, false);
            // This sets the width of the dropdown menu to the width of the button.
            // menu.DropDown(button.worldBound, button, true, false);
            // This sets the width of the dropdown menu to the width of the longest item.
            // menu.DropDown(button.worldBound, button, true, true);
        };
         root.Add(button);
    }
}
```

## Static Fields

| Value                                                                                                                                  | Description                                                                             |
| -------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
| [checkmarkUssClassName](/engine/6000.0/script-reference/unityengine/uielements/genericdropdownmenu/checkmarkussclassname.md)           | USS class name of separators in elements of this type.                                  |
| [containerInnerUssClassName](/engine/6000.0/script-reference/unityengine/uielements/genericdropdownmenu/containerinnerussclassname.md) | USS class name of inner containers in elements of this type.                            |
| [containerOuterUssClassName](/engine/6000.0/script-reference/unityengine/uielements/genericdropdownmenu/containerouterussclassname.md) | USS class name of outer containers in elements of this type.                            |
| [contentWidthUssClassName](/engine/6000.0/script-reference/unityengine/uielements/genericdropdownmenu/contentwidthussclassname.md)     | USS class name that's added when the GenericDropdownMenu fits the width of its content. |
| [itemContentUssClassName](/engine/6000.0/script-reference/unityengine/uielements/genericdropdownmenu/itemcontentussclassname.md)       | USS class name of labels in elements of this type.                                      |
| [itemUssClassName](/engine/6000.0/script-reference/unityengine/uielements/genericdropdownmenu/itemussclassname.md)                     | USS class name of labels in elements of this type.                                      |
| [labelUssClassName](/engine/6000.0/script-reference/unityengine/uielements/genericdropdownmenu/labelussclassname.md)                   | USS class name of labels in elements of this type.                                      |
| [separatorUssClassName](/engine/6000.0/script-reference/unityengine/uielements/genericdropdownmenu/separatorussclassname.md)           | USS class name of separators in elements of this type.                                  |
| [ussClassName](/engine/6000.0/script-reference/unityengine/uielements/genericdropdownmenu/ussclassname.md)                             | USS class name of elements of this type.                                                |

## Constructors

| Constructor                                                                                                 | Description                                                 |
| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------- |
| [GenericDropdownMenu()](/engine/6000.0/script-reference/unityengine/uielements/genericdropdownmenu/ctor.md) | Initializes and returns an instance of GenericDropdownMenu. |

## Properties

| Property                                                                                                           | Description                                                                                                                                                                                                                                      |
| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [contentContainer](/engine/6000.0/script-reference/unityengine/uielements/genericdropdownmenu/contentcontainer.md) | Returns the content container for the [GenericDropdownMenu](/engine/6000.0/script-reference/unityengine/uielements/genericdropdownmenu.md). Allows users to create their own dropdown menu if they don't want to use the default implementation. |

## Methods

| Method                                                                                                           | Description                                                            |
| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
| [AddDisabledItem](/engine/6000.0/script-reference/unityengine/uielements/genericdropdownmenu/adddisableditem.md) | Adds a disabled item to this menu using a default VisualElement.       |
| [AddItem](/engine/6000.0/script-reference/unityengine/uielements/genericdropdownmenu/additem.md)                 | Adds an item to this menu using a default VisualElement.               |
| [AddSeparator](/engine/6000.0/script-reference/unityengine/uielements/genericdropdownmenu/addseparator.md)       | Adds a visual separator after the previously added items in this menu. |
| [DropDown](/engine/6000.0/script-reference/unityengine/uielements/genericdropdownmenu/dropdown.md)               | Displays the menu at the specified position.                           |
