Sdílet prostřednictvím


Zobrazit položky nabídky

Třídu .NET Multi-Platform App UI (.NET MAUI) MenuItem lze použít k definování položek nabídky pro nabídky, jako ListView jsou místní nabídky položek a kontextové nabídky aplikace Shell.

Následující snímky obrazovky znázorňují MenuItem objekty v místní nabídce v Androidu ListView :

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

Třída MenuItem definuje následující vlastnosti:

  • Command, typu ICommand, umožňuje vazbu uživatelských akcí, jako jsou klepnutí prstem nebo kliknutí, k příkazům definovaným v modelu viewmodel.
  • CommandParameter, typu object, určuje parametr, který má být předán do Command.
  • IconImageSource, typu ImageSource, definuje ikonu položky nabídky.
  • IsDestructive, typu bool, označuje, zda MenuItem odebere jeho přidružený prvek uživatelského rozhraní ze seznamu.
  • IsEnabled, typu booloznačuje, zda položka nabídky reaguje na vstup uživatele.
  • Text, typu string, určuje text položky nabídky.

Tyto vlastnosti jsou podporovány BindableProperty objekty, což znamená, že mohou být cílem datových vazeb.

Vytvoření položky MenuItem

Pokud chcete vytvořit položku nabídky, například jako místní nabídku položek ListView objektu, vytvořte MenuItem objekt v objektuViewCell, který se používá jako DataTemplate objekt pro ListViewobjekt .ItemTemplate ListView Když je objekt naplněn, vytvoří každou položku pomocí DataTemplate, zobrazí MenuItem volby při aktivaci místní nabídky pro položku.

Následující příklad ukazuje, jak vytvořit MenuItem v kontextu objektu ListView :

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

Výsledkem tohoto příkladu MenuItem bude objekt, který obsahuje text. Vzhled se MenuItem ale liší na různých platformách.

V kódu lze také vytvořit A 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
};

Místní nabídka v místní ListView nabídce je aktivována a zobrazena odlišně na každé platformě. V Androidu je místní nabídka aktivovaná dlouhým stisknutím položky seznamu. Místní nabídka nahradí oblast a oblast navigačního panelu a MenuItem možnosti jako vodorovná tlačítka. V iOSu je místní nabídka aktivována potažením prstu na položce seznamu. V položce seznamu se zobrazí místní nabídka a MenuItems zobrazí se jako vodorovná tlačítka. Ve Windows je místní nabídka aktivována kliknutím pravým tlačítkem myši na položku seznamu. Místní nabídka se zobrazí poblíž kurzoru jako svislý seznam.

Definování chování MenuItem

Třída MenuItem definuje Clicked událost. Obslužná rutina události může být připojena k této události, aby reagovala na klepnutí nebo kliknutí na MenuItem objekty:

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

Obslužnou rutinu události lze připojit také v kódu:

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

Tyto příklady odkazují na obslužnou rutinu OnItemClicked události, která je znázorněna v následujícím příkladu:

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
}

Definování vzhledu MenuItem

Ikony se zadají pomocí IconImageSource vlastnosti. Pokud je zadána ikona, text určený Text vlastností se nezobrazí. Následující snímek obrazovky ukazuje ikonu s ikonou MenuItem v Androidu:

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

MenuItem objekty zobrazují jenom ikony v Androidu. Na jiných platformách se zobrazí pouze text určený Text vlastností.

Poznámka:

Obrázky se dají ukládat do jednoho umístění v projektu aplikace. Další informace najdete v tématu Přidání obrázků do projektu .NET MAUI.

Povolení nebo zakázání MenuItem za běhu

Chcete-li povolit nebo zakázat MenuItem za běhu, vytvořte vazbu jeho Command vlastnosti na ICommand implementaci a ujistěte se, že canExecute delegát povolí a zakáže ICommand podle potřeby.

Důležité

Při použití Command vlastnosti k povolení nebo zakázání vlastnosti nevážete IsEnabled vlastnost na jinou MenuItemvlastnost .