Pergunta

Eu preciso mostrar programaticamente / esconder um MenuItem, o que seria a melhor maneira de fazer isso?

Foi útil?

Solução

Bem, para adicionar um MenuItem você vai precisar de algo ao longo destas linhas:

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);

(mas você provavelmente já tem isso).

Você vai precisar de alguma forma de amarrar o item de menu para a propriedade - mas sem ver o seu aplicativo eu realmente não posso sugerir o melhor caminho. Há a propriedade Tag que armazena um objeto; a propriedade UID que armazena uma string; a propriedade nome que também armazena uma string.

Enquanto:

menuItem.Visibility = Visibility.Visible;

e

menuItem.Visibility = Visibility.Collapsed;

deve alternar a visibilidade do item.

EDIT: Usando Collapsed vai esconder o item de menu e espaço não reserva no menu - você realmente não quer espaços em branco em um menu de contexto. (graças a Botz3000 para isso)

Então, em seu código onde o valor da propriedade é alterado você vai encontrar o item de menu que você deseja para exibir / ocultar utilizando a ligação que eu descrevi acima. Depois de ter o item que você pode mudá-lo de valor:

menuItem.Visibility = menuItem.Visibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible;

Outras dicas

Você tem certeza que deseja ocultar o MenuItem? É mais comum para desativá-lo, usando a estrutura de comando do 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 usará o resultado bool de Save_CanExecute para determinar se o comando do MenuItem atualmente pode executar e ativar / desativar o MenuItem em conformidade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top