首页 > 解决方案 > 如何将上下文菜单添加到 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 找不到类型“MenuFlyout”。确认您没有丢失程序集引用并且所有引用的程序集都已构建。

有人可以指出我正确的方向吗?

谢谢。

编辑 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 在“ViewCell”类型中找不到可附加属性“ContextActions”。

标签: xamlxamarinuwp

解决方案


错误 XLS0414 找不到类型“MenuFlyout”。确认您没有丢失程序集引用并且所有引用的程序集都已构建。

从文档MenuFlyout Class中,我们知道 classMenuFlyout 是 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


推荐阅读