c# - 如何隐藏 AttachedFlyout 菜单的菜单项?

标签 c# uwp uwp-xaml

我能够使用以下代码以编程方式显示右键单击菜单,显示/隐藏所需的菜单项很容易,因为我们可以根据需要创建 MenuFlyoutItem。

private void MyGrid_RightTapped(object sender, RightTappedRoutedEventArgs e)
{
    MenuFlyout myFlyout = new MenuFlyout();
    MenuFlyoutItem mnu1 = new MenuFlyoutItem { Text = "Rename" };    
    MenuFlyoutItem mnu2 = new MenuFlyoutItem { Text = "Delete" };    
    myFlyout.Items.Add(mnu1);   
    myFlyout.Items.Add(mnu2);
    mnu1.Click += mnu1_Click;
    mnu2.Click += mnu2_Click;

    FrameworkElement senderElement = sender as FrameworkElement;
    myFlyout.ShowAt(sender as UIElement, e.GetPosition(sender as UIElement));
}

但是,当我使用 xaml 作为 AttachedFlyout 创建菜单时,我无法隐藏特定的菜单项。这是我的代码:

    <ListView.ItemTemplate>
    <DataTemplate >
..............
        <Grid Name="GrdForFolderMenu">
            <FlyoutBase.AttachedFlyout >
                <MenuFlyout Placement="Right">
                    <MenuFlyoutItem Name="MenuFolderCreate" Text="New Folder" Click="MenuFolderCreate_Click" DataContext="Folders"/>
                    <MenuFlyoutItem Name="MenuFolderRename"  Text="Rename" Click="MenuFolderRename_Click"/>
                    <MenuFlyoutItem Name="MenuFolderExport"  Text="Export" Click="MenuFolderExport_Click" />
                    <MenuFlyoutSeparator />
                    <MenuFlyoutItem Name="MenuFolderDelete"  Text="Delete" Click="MenuFolderDelete_Click" />
                </MenuFlyout>
            </FlyoutBase.AttachedFlyout>
        ......
        ........

这是我的右键单击事件:

private void myListView_RightTapped(object sender, RightTappedRoutedEventArgs e)
{            
  FlyoutBase.ShowAttachedFlyout((FrameworkElement)sender);
}

努力在代码中隐藏特定的菜单项!请帮忙!

最佳答案

您只需获取 MenuFlyout 并将特定 MenuFlyoutItemVisibility 设置为 Collapsed 或从列表中删除它。

if (FlyoutBase.GetAttachedFlyout((FrameworkElement)sender) is MenuFlyout menuFlyout)
{
    // Hide 'MenuFolderExport' MenuFlyoutItem
    //menuFlyout.Items[2].Visibility = Visibility.Collapsed;

    // Or, remove 'MenuFolderExport' MenuFlyoutItem
    menuFlyout.Items.Remove(menuFlyout.Items[2]);
}

FlyoutBase.ShowAttachedFlyout((FrameworkElement)sender);

我还将 RightTapped 附加到您的 GrdForFolderMenu 并将所有 Name="xxx" 替换为 x:Name= "xxx".

关于c# - 如何隐藏 AttachedFlyout 菜单的菜单项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46115350/

相关文章:

c# - 包含引号的 html 标签上的子字符串

c# - 不要移动到新创建的方法/类/接口(interface)

c# - 按下按钮时在 C# 中播放声音

xaml - 在运行时动态更改 ListView 的 DataTemplate

xaml - UWP/XAML : What is the difference between theming in a page's Resources, 在单独的 ResourceDictionary 文件中,还是在 App.xaml 中?

c# - (UWP) 当你 x :Bind an event to a eventhandler in VM, 导航到新 View 时是否必须手动取消绑定(bind)?

c# - 如何在 asp.net 中设置控件属性

c# - 使用 UWP API 在 Win32 桌面应用程序中枚举 BLE 设备时出现问题

Azure通知中心UWP、UWP Toast通知不启动应用程序

xaml - 如何在 UWP 中仅读取 CalendarView 控件