Menu contestuale su TreeViewItem chiama il metodo di TreeViewItem?
-
21-08-2019 - |
Domanda
Ho una configurazione TreeView
in modo che ogni TreeViewItem
ha tasto destro del mouse menu contestuale applicato come Style
. Qualcosa di simile:
<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>
salvabile, copiabile e rimovibile sono le proprietà che provengono da l'oggetto che viene utilizzato come MenuItem
.
Quello che sto cercando è quando l'utente fa clic su un object.Save()
, sarebbe cliccare sul metodo appropriato dell'oggetto selezionato. Quindi, cliccando sul pulsante "Salva" object.Copy()
chiamerebbe <=>, "Copia" chiamate <=>, ecc, ma non sono sicuro che cosa la sintassi sarà simile, o se l'idea è in realtà accettabile in termini di tipico stile WPF. So che posso solo creare un nuovo gestore di eventi nella finestra che comprende, ma io preferisco l'elemento selezionato in sé per gestire l'evento.
Pensieri?
Grazie!
Soluzione
Purtroppo, non credo che ci sia un modo automatico per farlo. L'opzione più vicina potrebbe essere quella di impostare un RoutedUICommand
per ogni elemento della ContextMenu
, e quindi creare un CommandBinding
per ciascuna nella tua classe. Se si desidera quelli per andare al TreeViewItem
, avrete probabilmente bisogno di sottoclasse CommandBindings
e impostare il EventSetter
lì.
L'unica opzione che ho pensato che potrebbe funzionare potrebbe essere quella di aggiungere un MenuItem.Click
per TreeViewItems
al <=> stile. Tuttavia, ciò non ha funzionato -. Probabilmente perché gli elementi della <=> si trovano in una struttura ad albero visuale diverso dal <=>