WPF скрывает MenuItem в ContextMenu на основе свойства объекта - PullRequest
5 голосов
/ 09 мая 2009

Мне нужно программно показать / скрыть MenuItem, что будет лучшим способом сделать это?

Ответы [ 2 ]

5 голосов
/ 09 мая 2009

Ну, чтобы добавить 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;
0 голосов
/ 29 июля 2011

Вы уверены, что хотите скрыть 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.

...