代码之家  ›  专栏  ›  技术社区  ›  Sara Chipps

WPF基于对象属性在ContextMenu上隐藏菜单项

  •  5
  • Sara Chipps  · 技术社区  · 17 年前

    我需要以编程方式显示/隐藏菜单项,最好的方法是什么?

    2 回复  |  直到 15 年前
        1
  •  5
  •   ChrisF    17 年前

    好吧,要添加一个菜单项,你需要以下内容:

    var menuItem = new MenuItem() { Header = "Menu Name", Name = "Identifier", IsCheckable = true, IsChecked = visible };
    menuItem.Click += new RoutedEventHandler(contextMenu_onClick);
    int position = contextMenu.Items.Add(menuItem);
    

    您需要某种方式将菜单项与酒店联系起来,但在没有看到您的应用程序的情况下,我无法真正建议最佳方式。Tag属性用于存储对象;存储字符串的Uid属性;Name属性也存储字符串。

    同时:

    menuItem.Visibility = Visibility.Visible;
    

    menuItem.Visibility = Visibility.Collapsed;
    

    应该切换项目的可见性。

    编辑: (感谢Botz3000)

    然后,在更改属性值的代码中,您将使用我上面描述的链接找到要显示/隐藏的菜单项。一旦你有了这个项目,你就可以切换它的值:

    menuItem.Visibility = menuItem.Visibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible;
    
        2
  •  0
  •   Matthew    15 年前

    MenuItem ?更常见的是使用WPF的命令框架禁用它:

    <MenuItem Header="_MenuName" Command="{x:Static local:MyCommands.SomeCommand}" />
    
    ...
    
    <!-- In the menu item or any of its ancestors: -->
    <SomeControl.CommandBindings>
        <CommandBinding Command="{x:Static local:MyCommands.SomeCommand}" Executed="Save_Executed" CanExecute="Save_CanExecture" />
    </SomeControl.CommandBindings>
    

    WPF将使用 bool 结果 Save_CanExecute 以确定 菜单项 菜单项