Je dois afficher/masquer un MenuItem par programme, quelle serait la meilleure façon de procéder?WPF masquer MenuItem sur ContextMenu basé sur la propriété d'objet
Répondre
Eh bien, pour ajouter un MenuItem vous besoin de quelque chose le long de ces lignes:
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à obtenu 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 suggérer la meilleure façon. 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;
devrait basculer la visibilité de l'élément. L'utilisation de Réduire permet de masquer l'élément de menu et de ne pas réserver d'espace dans le menu. Vous ne voulez pas vraiment d'espaces 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 en utilisant le lien que j'ai décrit ci-dessus. Une fois que vous avez l'élément que vous pouvez changer sa valeur:
menuItem.Visibility = menuItem.Visibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible;
Êtes-vous sûr de vouloir cacher la MenuItem
? Il est plus fréquent de le désactiver, en utilisant le framework commandant 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 résultat de bool
Save_CanExecute
pour déterminer si la commande de la MenuItem
peut actuellement exécuter et activer/désactiver le MenuItem
en conséquence.
ne serait pas Visibility.Collapsed être mieux? – Botz3000
Merci - J'ai mis à jour la réponse – ChrisF