# DropdownMenuAction

> Represents a menu action item.

## Definition

* **Type:** Class
* **Namespace:** [UnityEngine.UIElements](/engine/6000.6/script-reference/unityengine/uielements.md)
* **Assembly:** UnityEngine.UIElementsModule
* **Inherits from:** [DropdownMenuItem](/engine/6000.6/script-reference/unityengine/uielements/dropdownmenuitem.md)

```csharp
public class DropdownMenuAction : DropdownMenuItem
```

## Remarks

A [DropdownMenu](/engine/6000.6/script-reference/unityengine/uielements/dropdownmenu.md) contains one or more DropdownMenuAction instances. Each DropdownMenuAction instance can have its own status and callback.

The following example shows how to create a dropdown menu with actions, sub-menu actions, and conditional actions.

## Examples

```csharp
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
public class DropdownMenuExample: EditorWindow
{
    public string[] playerNames = new string[] { "Alex", "Carol", "Ethan", "Jen" };

    [MenuItem("Window/UI Toolkit/DropdownMenu Example")]
    public static void ShowExample()
    {
        DropdownMenuExample wnd = GetWindow<DropdownMenuExample>();
        wnd.titleContent = new GUIContent("DropdownMenu Example");
    }

    public void CreateGUI()
    {
        var window = EditorWindow.GetWindow<EditorWindow>();
        var root = window.rootVisualElement;

        // Create a new dropdown menu
        var playersContainer = new VisualElement();
        var instructionLabel = new Label("Right Click on the player to edit their details");
        root.Add(instructionLabel);
        root.Add(playersContainer);

        for(int i = 0; i < playerNames.Length; i++)
        {
            var playerName = playerNames[i];
            // Set an ID for each player label
            var id = i+1;
            var playerLabel = new Label { text = playerName, name = $"label{playerName}"};
            playerLabel.AddManipulator(CreateDropdownMenu());
            playersContainer.Add(playerLabel);
        }
    }

    public IManipulator CreateDropdownMenu()
    {
       ContextualMenuManipulator menuManipulator = new ContextualMenuManipulator(
           menuEvent =>
           {
               if (menuEvent.target is not Label playerLabel)
                     return;

               // Player Name Actions
               menuEvent.menu.AppendAction("Retire Player", a =>
               {
                   playerLabel.text = $"[RETIRED] {playerLabel.text}";
                   playerLabel.style.backgroundColor = Color.gray;
                   playerLabel.style.color = Color.red;
                   playerLabel.userData = "retired";
               }, DropdownMenuAction.AlwaysEnabled, playerLabel.userData);

               menuEvent.menu.AppendAction("Set Player To Gold Status", a =>
               {
                   playerLabel.style.color = Color.yellow;
               });

               // Separate Team Actions from Player Name Actions
               menuEvent.menu.AppendSeparator();

               // Create a sub menu containing both teams
               menuEvent.menu.AppendAction("Change Team/Lizards", a =>
               {
                   playerLabel.style.backgroundColor = Color.green;
               }, ChangeTeamActionStatus, playerLabel.userData);
               menuEvent.menu.AppendAction("Change Team/Sharks", a =>
               {
                   playerLabel.style.backgroundColor = Color.cyan;
               }, ChangeTeamActionStatus, playerLabel.userData);
           });
       return menuManipulator;
    }

    public DropdownMenuAction.Status ChangeTeamActionStatus(DropdownMenuAction a)
    {
        // If a player is retired, hide the team change options
        return a.userData is string and "retired" ? DropdownMenuAction.Status.Hidden : DropdownMenuAction.Status.Normal;
    }
}
```

## Constructors

| Constructor                                                                                                                                                                                                                                                                                             | Description                                          |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- |
| [DropdownMenuAction(System.String,System.Action\{UnityEngine.UIElements.DropdownMenuAction},System.Func\{UnityEngine.UIElements.DropdownMenuAction,UnityEngine.UIElements.DropdownMenuAction.Status},System.Object)](/engine/6000.6/script-reference/unityengine/uielements/dropdownmenuaction/ctor.md) | Initializes a menu action with specified parameters. |

## Properties

| Property                                                                                            | Description                                                                                                           |
| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| [eventInfo](/engine/6000.6/script-reference/unityengine/uielements/dropdownmenuaction/eventinfo.md) | Provides information about the event that triggered the dropdown menu.                                                |
| [name](/engine/6000.6/script-reference/unityengine/uielements/dropdownmenuaction/name.md)           | The name of the item.                                                                                                 |
| [status](/engine/6000.6/script-reference/unityengine/uielements/dropdownmenuaction/status-1.md)     | The status of the item.                                                                                               |
| [userData](/engine/6000.6/script-reference/unityengine/uielements/dropdownmenuaction/userdata.md)   | The userData object stored by the constructor. You can use AppendAction to set it and use it in the status callbacks. |

## Methods

| Method                                                                                                                | Description                                                               |
| --------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
| [Execute](/engine/6000.6/script-reference/unityengine/uielements/dropdownmenuaction/execute.md)                       | Executes the callback associated with this item.                          |
| [UpdateActionStatus](/engine/6000.6/script-reference/unityengine/uielements/dropdownmenuaction/updateactionstatus.md) | Updates the status flag of this item by calling the item status callback. |

## Static Methods

| Method                                                                                                        | Description                                                                                                                                                                              |
| ------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [AlwaysDisabled](/engine/6000.6/script-reference/unityengine/uielements/dropdownmenuaction/alwaysdisabled.md) | Creates a status callback that always returns [DropdownMenuAction.Status.Disabled](/engine/6000.6/script-reference/unityengine/uielements/dropdownmenuaction/status/disabled.md) status. |
| [AlwaysEnabled](/engine/6000.6/script-reference/unityengine/uielements/dropdownmenuaction/alwaysenabled.md)   | Creates a status callback that always returns [DropdownMenuAction.Status.Normal](/engine/6000.6/script-reference/unityengine/uielements/dropdownmenuaction/status/normal.md).            |

## Enums

| Enum                                                                                                             | Description              |
| ---------------------------------------------------------------------------------------------------------------- | ------------------------ |
| [DropdownMenuAction.Status](/engine/6000.6/script-reference/unityengine/uielements/dropdownmenuaction/status.md) | Status of the menu item. |
