5

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

4

2 回答 2

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;
于 2009-05-09T10:21:58.327 回答
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结果Save_CanExecute来确定MenuItem' 命令当前是否可以执行,并MenuItem相应地启用/禁用。

于 2011-07-29T19:06:02.877 回答