как добавить контекстное меню к элементу списка в приложении xamarin UWP?

#xaml #xamarin #uwp

Вопрос:

У меня есть следующий код xaml:

  <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:local="clr-namespace:GraphTutorial.Models"
         Title="Shared Document Library"
         x:Class="GraphTutorial.SPDocumentLibraryContentsPage">

    ...
    ...

     <ListView x:Name="SharedDocumentList"
                  HasUnevenRows="true"
                  Margin="10,10,10,10"
                  ItemSelected="OnItemSelected">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout Margin="10,10,10,10">
                            <Label Text="{Binding Path=Id}"
                                   FontAttributes="Bold"
                                   FontSize="Medium" />
                            <Label Text="{Binding Path=WebUrl}"
                                   FontSize="Small" />
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
            <ListView.Resources>
                <MenuFlyout x:Name="DocumentActions">
                    <FlyoutItem x:Name="Edit"  Text="Edit" />
                    <FlyoutItem x:Name="Remove" Text="Remove"    Click="Remove_Click" />
                </MenuFlyout>
            </ListView.Resources>
        </ListView>
 

В настоящее время я получаю следующее сообщение об ошибке в строке:

Ошибка XLS0414 Тип «Меню» не найден. Убедитесь, что вы не пропустили ссылку на сборку и что все сборки, на которые имеются ссылки, были созданы.

Может ли кто-нибудь указать мне правильное направление?

Спасибо.

ПРАВКА 1

Я тоже пробовал это:

 <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:local="clr-namespace:GraphTutorial.ContextMenu"  
         Title="Shared Document Library"
         x:Class="GraphTutorial.SPDocumentLibraryContentsPage">

        <ListView x:Name="SharedDocumentList"
                  HasUnevenRows="true"
                  Margin="10,10,10,10"
                  ItemSelected="OnItemSelected">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout Margin="10,10,10,10">
                            <Label Text="{Binding Path=Id}"
                                   FontAttributes="Bold"
                                   FontSize="Medium" />
                            <Label Text="{Binding Path=WebUrl}"
                                   FontSize="Small" />
                        </StackLayout>
                    </ViewCell>
                    <ViewCell.ContextActions>
                        <MenuItem Text="Add" Clicked="Add_Clicked"></MenuItem>
                        <MenuItem Text="Delete" Clicked="Delete_Clicked"></MenuItem>
                        <MenuItem Text="Edit" Clicked="Edit_Clicked">
                    </ViewCell.ContextActions>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
 

Но это возвращает ошибку:

XLS0415 Присоединяемое свойство «Контекстные действия» не было найдено в типе «Ячейка просмотра».

Ответ №1:

Ошибка XLS0414 Тип «Меню» не найден. Убедитесь, что вы не пропустили ссылку на сборку и что все сборки, на которые имеются ссылки, были созданы.

Из класса меню документа мы знаем,что этот класс MenuFlyout является классом в uwp, поэтому мы не можем использовать его в xamarin.

Если вы хотите добавить контекстное меню к элементу списка xamarin UWP ,вы можете обратиться к следующему коду:

 <ListView x:Name="listView" Margin="20" ItemSelected="OnListItemSelected">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <StackLayout Margin="20,0,0,0" Orientation="Horizontal" HorizontalOptions="FillAndExpand">
                    <Label Text="{Binding Name}" VerticalTextAlignment="Center" HorizontalOptions="StartAndExpand" />
                    <Image Source="check.png" HorizontalOptions="End" IsVisible="{Binding Done}" />
                </StackLayout>

                <ViewCell.ContextActions>
                    <MenuItem Text="Delete"
                                  Clicked="OnDeleteClicked"/>
                </ViewCell.ContextActions>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>
 

В файле page.xaml.cs

     void OnDeleteClicked(object sender, EventArgs e)
    {
        TodoItem itemToDelete = ((sender as MenuItem).BindingContext as TodoItem);
        // other code
    }
 

Для получения более подробной информации вы можете проверить:

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/menuitem

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/menuitem#cross-platform-context-menu-behavior

Комментарии:

1. Привет. Так что это довольно похоже / в основном то же самое, что и во втором примере, который я пробовал — перечислено в разделе Редактирование 1. Но я получаю ошибку, как (сейчас) показано в разделе Редактирование 1.

2. чтобы заставить код работать, мне просто нужно было определить контекстное действие перед фактическим выводом стека, которое я изменил на сетку.