共用方式為


顯示功能表項

.NET 多平臺應用程式 UI (.NET MAUI) MenuItem 類別可用來定義功能表的功能表項,例如 ListView 專案操作功能表和殼層應用程式飛出視窗功能表。

下列螢幕快照顯示 MenuItem Android 操作選單中的物件 ListView

Screenshot of menu items in a ListView context menu on Android.

類別 MenuItem 會定義下列屬性:

  • CommandICommand別為 的 ,允許將用戶動作,例如手指點選或按兩下,系結至 ViewModel 上定義的命令。
  • CommandParameterobject別為 的 ,指定應該傳遞至 的參數 Command
  • IconImageSourceImageSource別為 的 ,會定義功能表項圖示。
  • IsDestructivebool別為 的 ,表示 是否會 MenuItem 從清單中移除其相關聯的UI元素。
  • IsEnabledbool別為 的 ,表示功能表項是否回應使用者輸入。
  • Textstring別為 的 ,指定功能表項文字。

這些屬性是由 BindableProperty 物件所支援,這表示這些屬性可以是數據系結的目標。

建立 MenuItem

若要建立功能表項,例如做為物件專案上的ListView操作功能表,請在物件內ViewCell建立 MenuItem 物件,該物件會當做 DataTemplateListViewItemTemplate物件。 ListView當物件填入時,它會使用 DataTemplate來建立每個專案,以MenuItem在項目啟動操作功能表時公開選項。

下列範例示範如何在 物件的內容ListView中建立 MenuItem

<ListView>
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <ViewCell.ContextActions>
                    <MenuItem Text="Context menu option" />
                </ViewCell.ContextActions>
                <Label Text="{Binding .}" />
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

此範例會產生 MenuItem 具有文字的物件。 不過,不同平台的外觀 MenuItem 會有所不同。

MenuItem也可以在程式代碼中建立 :

// Return a ViewCell instance that is used as the template for each list item
DataTemplate dataTemplate = new DataTemplate(() =>
{
    // A Label displays the list item text
    Label label = new Label();
    label.SetBinding(Label.TextProperty, ".");

    // A ViewCell serves as the DataTemplate
    ViewCell viewCell = new ViewCell
    {
        View = label
    };

    // Add a MenuItem to the ContextActions
    MenuItem menuItem = new MenuItem
    {
        Text = "Context Menu Option"
    };
    viewCell.ContextActions.Add(menuItem);

    // Return the custom ViewCell to the DataTemplate constructor
    return viewCell;
});

ListView listView = new ListView
{
    ...
    ItemTemplate = dataTemplate
};

中的 ListView 操作功能表會啟動,並在每個平臺上以不同的方式顯示。 在Android上,操作功能表會由清單專案上的長按來啟動。 操作選單會取代標題和導覽列區域,選項 MenuItem 會顯示為水平按鈕。 在iOS上,操作功能表會藉由在清單專案上撥動來啟動。 操作功能表會顯示在清單專案上,並 MenuItems 顯示為水平按鈕。 在 Windows 上,以滑鼠右鍵按下清單專案,即可啟動操作選單。 操作功能表會在游標附近顯示為垂直清單。

定義 MenuItem 行為

類別 MenuItemClicked 定義事件。 事件處理程式可以附加至此事件,以回應點選或按兩下 MenuItem 物件:

<MenuItem ...
          Clicked="OnItemClicked" />

事件處理程式也可以在程式代碼中附加:

MenuItem item = new MenuItem { ... };
item.Clicked += OnItemClicked;

這些範例會參考 OnItemClicked 事件處理程式,如下列範例所示:

void OnItemClicked(object sender, EventArgs e)
{
    MenuItem menuItem = sender as MenuItem;

    // Access the list item through the BindingContext
    var contextItem = menuItem.BindingContext;

    // Do something with the contextItem here
}

定義 MenuItem 的外觀

圖示是使用 IconImageSource 屬性來指定。 如果指定圖示,則不會顯示 屬性所 Text 指定的文字。 下列螢幕快照顯示 MenuItem Android 上具有圖示的 :

Screenshot of menu items, with an icon, in a ListView context menu on Android.

MenuItem 物件只會在 Android 上顯示圖示。 在其他平臺上,只會顯示 屬性所 Text 指定的文字。

注意

影像可以儲存在應用程式專案中的單一位置。 如需詳細資訊,請參閱 將映像新增至 .NET MAUI 專案

在運行時間啟用或停用 MenuItem

若要在執行時間開啟或停用 MenuItem ,請將其 Command 屬性系結至 ICommand 實作,並確定 canExecute 委派會適當地啟用和停用 ICommand

重要

使用 Command 屬性來啟用或停用 MenuItem時,請勿將 IsEnabled 屬性系結至另一個屬性。