Ho bisogno di mostrare/nascondere un MenuItem in modo programmatico, quale sarebbe il modo migliore per farlo?WPF nascondi MenuItem su ContextMenu in base alla proprietà dell'oggetto
risposta
Beh, per aggiungere un Menultem avrete bisogno di qualcosa in queste righe:
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);
(ma probabilmente avete già ottenuto questo).
Avrete bisogno di un modo per legare la voce di menu alla proprietà - ma senza vedere la vostra applicazione non posso davvero suggerire il modo migliore. C'è la proprietà Tag che memorizza un oggetto; la proprietà Uid che memorizza una stringa; la proprietà Name che memorizza anche una stringa.
Mentre:
menuItem.Visibility = Visibility.Visible;
e
menuItem.Visibility = Visibility.Collapsed;
dovrebbe commutare la visibilità della voce.
MODIFICA: L'utilizzo di Collapsed nasconderà la voce di menu e non riserva lo spazio nel menu: non si desidera realmente spazi vuoti in un menu di scelta rapida. (grazie a Botz3000 per questo)
Quindi nel codice in cui viene modificato il valore della proprietà, è possibile trovare la voce di menu che si desidera mostrare/nascondere utilizzando il collegamento descritto sopra. Una volta che hai la voce che si può passare il suo valore:
menuItem.Visibility = menuItem.Visibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible;
Sei sicuro che si desidera nascondere il MenuItem
? È più comune per disattivarlo, utilizzando framework comandante di 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 utilizzerà il bool
risultato di Save_CanExecute
per determinare se il comando s' il MenuItem
attualmente può eseguire, e abilitare/disabilitare il MenuItem
conseguenza.
non sarebbe Visibility.Collapsed essere migliore? – Botz3000
Grazie - Ho aggiornato la risposta – ChrisF