我需要以编程方式显示/隐藏MenuItem,这样做的最佳方法是什么?
答案 0 :(得分:5)
好吧,要添加一个MenuItem,你需要这些内容:
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;
应该切换项目的可见性。
编辑:使用Collapsed将隐藏菜单项而不是在菜单中保留空间 - 您不需要在上下文菜单中使用空格。 (感谢Botz3000)
然后在您的代码中,属性值被更改,您将使用我上面描述的链接找到您想要显示/隐藏的菜单项。获得该项目后,您可以切换它的值:
menuItem.Visibility = menuItem.Visibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible;
答案 1 :(得分:0)
您确定要隐藏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
的{{1}}结果来确定Save_CanExecute
的命令当前是否可以执行,并相应地启用/禁用MenuItem
。