基于对象属性,在上下文菜单中隐藏WPF MenuItem

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

5
好的,要添加一个菜单项,您需要类似以下内容的代码:
```html

好的,要添加一个菜单项,您需要类似以下内容的代码:

```
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
使用Visibility.Collapsed不是更好吗? - Botz3000

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将使用Save_CanExecutebool结果来确定MenuItem的命令是否可以当前执行,并相应地启用/禁用MenuItem


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接