Ich muss ein MenuItem programmatisch ein-/ausblenden, was wäre der beste Weg, dies zu tun?WPF MenüItem auf ContextMenu basierend auf Objekteigenschaft ausblenden
Antwort
Nun, fügen Sie ein MenuItem Sie etwas in dieser Richtung müssen:
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);
(aber Sie haben wahrscheinlich schon diese bekam).
Sie werden eine Möglichkeit brauchen, den Menüpunkt an die Immobilie zu binden - aber ohne Ihre Bewerbung zu sehen, kann ich Ihnen nicht den besten Weg empfehlen. Es gibt die Eigenschaft Tag, die ein Objekt speichert. die Uid-Eigenschaft, die eine Zeichenfolge speichert; die Eigenschaft Name, die auch eine Zeichenfolge speichert.
While:
menuItem.Visibility = Visibility.Visible;
und
menuItem.Visibility = Visibility.Collapsed;
sollte die Sichtbarkeit des Elements wechseln.
BEARBEITEN: Mit Collapsed wird der Menüeintrag ausgeblendet und nicht Platz im Menü reserviert - Sie wollen nicht wirklich Leerzeichen in einem Kontextmenü. (Danke an Botz3000 dafür)
Dann in Ihrem Code, wo der Wert der Eigenschaft geändert wird, finden Sie den Menüpunkt, den Sie mit der oben beschriebenen Verknüpfung anzeigen/ausblenden möchten. Sobald Sie das Einzelteil haben, können Sie schalten es Wert ist:
menuItem.Visibility = menuItem.Visibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible;
Sind Sie sicher, dass Sie die MenuItem
verbergen? Es ist häufiger zu deaktivieren, mit WPF kommandier Rahmen:
<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 verwendet das bool
Ergebnis Save_CanExecute
, um zu bestimmen, ob die MenuItem
‚s-Befehl kann zur Zeit ausführen, und aktivieren/deaktivieren Sie die MenuItem
entsprechend.
würde nicht Sichtbarkeit. Kollabiert besser sein? – Botz3000
Danke - Ich habe die Antwort aktualisiert – ChrisF