다음을 통해 공유


메뉴 항목 표시

.NET 다중 플랫폼 앱 UI(.NET MAUI) MenuItem 클래스를 사용하여 항목 상황에 맞는 메뉴 및 셸 앱 플라이아웃 메뉴와 같은 ListView 메뉴의 메뉴 항목을 정의할 수 있습니다.

다음 스크린샷은 Android의 상황에 맞는 메뉴에 ListView 있는 개체를 보여 MenuItem 줍니다.

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

MenuItem 클래스는 다음 속성을 정의합니다.

  • Command형식 ICommand의 경우 viewmodel에 정의된 명령에 손가락 탭 또는 클릭과 같은 사용자 작업을 바인딩할 수 있습니다.
  • CommandParameter형식 object의 .에 전달되어야 하는 매개 변수를 Command지정합니다.
  • IconImageSource형식 ImageSource의 메뉴 항목 아이콘을 정의합니다.
  • IsDestructive형식 boolMenuItem />은 목록에서 연결된 UI 요소를 제거할지 여부를 나타냅니다.
  • IsEnabled의 형식 bool은 메뉴 항목이 사용자 입력에 응답하는지 여부를 나타냅니다.
  • Text형식 string의 메뉴 항목 텍스트를 지정합니다.

이러한 속성은 개체에 의해 BindableProperty 지원되므로 데이터 바인딩의 대상이 될 수 있습니다.

MenuItem 만들기

메뉴 항목을 만들려면(예: 개체 항목의 ListView 상황에 맞는 메뉴로) 개체의 개체로 DataTemplate 사용되는 개체 내에 ViewCell 개체를 ListViewItemTemplate만듭니 MenuItem 다. 개체가 채워지면 항목에 ListView 대해 상황에 맞는 메뉴가 활성화될 때 선택 항목을 노출하여 MenuItemDataTemplate항목을 만듭니다.

다음 예제에서는 개체의 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 은 플랫폼마다 다릅니다.

코드에서 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
};

A의 ListView 상황에 맞는 메뉴는 활성화되고 각 플랫폼에서 다르게 표시됩니다. Android에서 상황에 맞는 메뉴는 목록 항목을 길게 눌러 활성화됩니다. 상황에 맞는 메뉴는 제목 및 탐색 모음 영역을 대체하고 MenuItem 옵션은 가로 단추로 표시됩니다. iOS에서 상황에 맞는 메뉴는 목록 항목을 살짝 밀어 활성화됩니다. 상황에 맞는 메뉴는 목록 항목에 표시되며 MenuItems 가로 단추로 표시됩니다. Windows에서 상황에 맞는 메뉴는 목록 항목을 마우스 오른쪽 단추로 클릭하여 활성화됩니다. 상황에 맞는 메뉴는 커서 근처에 세로 목록으로 표시됩니다.

MenuItem 동작 정의

클래스는 MenuItem 이벤트를 정의합니다 Clicked . 이벤트 처리기를 이 이벤트에 연결하여 개체를 탭하거나 클릭하는 데 반응할 수 있습니다.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 표시되지 않습니다. 다음 스크린샷은 Android의 MenuItem 아이콘을 보여줍니다.

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 .

Important

속성을 사용하거나 사용하지 않도록 설정할 MenuItem때 속성을 다른 속성에 Command 바인딩 IsEnabled 하지 마세요.