WPF скрывает MenuItem в ContextMenu на основе свойства объекта

StackOverflow https://stackoverflow.com/questions/842192

Вопрос

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

Это было полезно?

Решение

Что ж, чтобы добавить элемент меню, вам понадобится что-то вроде этого:

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 будет использовать bool результат Save_CanExecute чтобы определить, является ли MenuItemкоманда 's в данный момент может выполняться и включать / отключать MenuItem соответственно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top