Question

Je dois afficher / masquer un élément de menu par programmation, quel serait le meilleur moyen de le faire?

Était-ce utile?

La solution

Eh bien, pour ajouter un MenuItem, vous avez besoin de quelque chose du genre:

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

(mais vous avez probablement déjà cela).

Vous aurez besoin d'un moyen de lier l'élément de menu à la propriété - mais sans voir votre application, je ne peux pas vraiment vous suggérer le meilleur moyen. Il y a la propriété Tag qui stocke un objet; la propriété Uid qui stocke une chaîne; la propriété Name qui stocke également une chaîne.

Alors que:

menuItem.Visibility = Visibility.Visible;

et

menuItem.Visibility = Visibility.Collapsed;

doit basculer la visibilité de l'élément.

MODIFIER: L'utilisation de Réduit masque l'élément de menu et ne réserve pas d'espace dans le menu - vous ne voulez pas vraiment d'espaces vides dans un menu contextuel. (merci à Botz3000 pour cela)

Ensuite, dans votre code où la valeur de la propriété est modifiée, vous trouverez l'élément de menu que vous souhaitez afficher / masquer à l'aide du lien que j'ai décrit ci-dessus. Une fois que vous avez l'élément, vous pouvez changer sa valeur:

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

Autres conseils

Êtes-vous sûr de vouloir masquer le MenuItem? Il est plus courant de le désactiver, à l'aide de la structure de commande de 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 utilisera le bool résultat de Save_CanExecute pour déterminer si la commande <=> peut actuellement être exécutée et activer / désactiver le <=> en conséquence.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top