¿El menú contextual en TreeViewItem llama al método de TreeViewItem?
-
21-08-2019 - |
Pregunta
tengo un TreeView
configurar para que cada TreeViewItem
tiene el menú contextual del botón derecho aplicado como Style
.Algo como:
<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>
Guardable, Copiable y Eliminable son propiedades que provienen del objeto que se utiliza como TreeViewItem
.
Lo que estoy buscando es cuando el usuario hace clic en un MenuItem
, haría clic en el método apropiado del objeto seleccionado.Entonces haciendo clic en "Guardar" MenuItem
Llamaría object.Save()
, llamadas "Copiar" object.Copy()
, etc.Pero no estoy seguro de cómo sería la sintaxis o si la idea es realmente aceptable en términos del estilo típico de WPF.Sé que puedo crear un nuevo controlador de eventos en la ventana circundante, pero prefiero que el elemento seleccionado maneje el evento.
¿Pensamientos?
¡Gracias!
Solución
Desafortunadamente, no creo que exista una forma automatizada de hacer esto.La opción más cercana sería configurar un RoutedUICommand
para cada elemento del ContextMenu
, y luego crear un CommandBinding
para cada uno en tu clase.Si quieres que esos vayan al TreeViewItem
, probablemente necesitarás subclasificar TreeViewItem
y configurar el CommandBindings
allá.
La única opción que pensé que podría funcionar sería agregar un EventSetter
para MenuItem.Click
hacia TreeViewItem
estilo.Sin embargo, eso no funcionó, probablemente porque los elementos del ContextMenu
están en un árbol visual diferente al TreeViewItems
.