我需要以编程方式显示/隐藏一个菜单项,最好的方法是什么?
好的,要添加一个菜单项,您需要类似以下内容的代码:
```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;
您确定要隐藏 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将使用Save_CanExecute
的bool
结果来确定MenuItem
的命令是否可以当前执行,并相应地启用/禁用MenuItem
。