WPF基于对象属性隐藏ContextMenu上的MenuItem

时间:2009-05-08 23:03:45

标签: .net wpf contextmenu menuitem

我需要以编程方式显示/隐藏MenuItem,这样做的最佳方法是什么?

2 个答案:

答案 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