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!

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top