Domanda

Devo mostrare / nascondere a livello di codice un MenuItem, quale sarebbe il modo migliore per farlo?

È stato utile?

Soluzione

Bene, per aggiungere un MenuItem avrai bisogno di qualcosa del genere:

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 hai già questo).

Avrai bisogno di un modo per legare la voce di menu alla proprietà, ma senza vedere la tua 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 attivare / disattivare la visibilità dell'elemento.

MODIFICA: L'uso di Collapsed nasconderà la voce di menu e non riserverà spazio nel menu - in realtà non vuoi spazi vuoti in un menu contestuale. (grazie a Botz3000 per questo)

Quindi, nel tuo codice in cui viene modificato il valore della proprietà, troverai la voce di menu che desideri mostrare / nascondere usando il collegamento che ho descritto sopra. Una volta che hai l'oggetto puoi cambiarne il valore:

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

Altri suggerimenti

Sei sicuro di voler nascondere MenuItem? È più comune disabilitarlo, usando il framework di comando 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 <=> può attualmente essere eseguito e abilitare / disabilitare <=> di conseguenza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top