Kontextmenü auf TreeViewItem Anrufe TreeViewItem-Methode?
-
21-08-2019 - |
Frage
Ich habe eine TreeView
Setup, so dass jedes TreeViewItem
rechten Maustaste im Kontextmenü als Style
angewendet wurde. So etwas wie:
<Grid.Resources>
<ContextMenu x:Key="contextMenu">
<MenuItem Header="Save" IsEnabled="{Binding Path=Saveable}"/>
<MenuItem Header="Copy" IsEnabled="{Binding Path=Copyable}"/>
<MenuItem Header="Remove" IsEnabled="{Binding Path=Removeable}"/>
</ContextMenu>
<Style TargetType="TreeViewItem">
<Setter Property="ContextMenu" Value="{StaticResource contextMenu}" />
</Style>
</Grid.Resources>
speicherbar, Kopierbarer und Removeablepapier sind Eigenschaften, die von dem Objekt kommen, die als TreeViewItem
verwendet wird.
Was ich suche ist, wenn der Benutzer auf einem MenuItem
klickt, wäre es auf der entsprechenden Methode des ausgewählten Objekts klicken. So einen Klick auf den „Speichern“ MenuItem
würde object.Save()
nennen, „Kopieren“, ruft object.Copy()
usw. Aber ich bin nicht sicher, was die Syntax aussehen würde, oder ob die Idee in Bezug auf die typische WPF Stil eigentlich akzeptabel ist. Ich weiß, ich kann gerade einen neuen Event-Handler in dem umfassenden Fenster erstellen, aber ich würde das ausgewählte Element lieber selbst das Ereignis zu behandeln.
Die Gedanken?
Danke!
Lösung
Leider glaube ich nicht, dass es eine automatisierte Möglichkeit, dies zu tun. Die nächste Option wäre ein RoutedUICommand
für jedes Element in den ContextMenu
einrichten, und dann eine CommandBinding
für jeden in der Klasse erstellen. Wenn Sie diejenigen, die TreeViewItem
gehen wollen, müssen Sie wahrscheinlich TreeViewItem
Unterklasse und die CommandBindings
dort einzurichten.
Die einzige Option, die ich dachte, vielleicht wäre zu arbeiten, um eine EventSetter
für MenuItem.Click
zum TreeViewItem
Stil. Aber das hat nicht funktioniert -. Wahrscheinlich, weil die Elemente in der ContextMenu
sind in einer anderen visuellen Struktur vom TreeViewItems