2009-05-13 6 views
0

J'ai une configuration TreeView afin que chaque TreeViewItem ait un menu contextuel de clic-droit appliqué comme Style. Quelque chose comme:Menu contextuel sur TreeViewItem Appelle la méthode TreeViewItem?

<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> 

propriétés mémorisables, copiables et sont Removeable qui viennent de l'objet qui est utilisé comme TreeViewItem. Ce que je cherche est quand l'utilisateur clique sur un MenuItem, il cliquera sur la méthode appropriée de l'objet choisi. Donc, en cliquant sur le bouton "Sauvegarder" MenuItem, vous appelez object.Save(), "Copier" appelle object.Copy(), etc Mais je ne suis pas sûr de ce que la syntaxe ressemblerait, ou si l'idée est réellement acceptable en termes de style WPF typique. Je sais que je peux simplement créer un nouveau gestionnaire d'événements dans la fenêtre englobante, mais je préférerais que l'élément sélectionné lui-même gère l'événement.

Pensées?

Merci!

Répondre

2

Malheureusement, je ne pense pas qu'il existe un moyen automatisé de le faire. L'option la plus proche consisterait à configurer un RoutedUICommand pour chaque élément du ContextMenu, puis à créer un CommandBinding pour chaque élément de votre classe. Si vous voulez que ceux-ci se rendent au TreeViewItem, vous devrez probablement sous-classer TreeViewItem et y configurer le CommandBindings.

La seule option que je pensais pouvoir travailler serait d'ajouter un EventSetter pour MenuItem.Click au style TreeViewItem. Cependant, cela n'a pas fonctionné - probablement parce que les éléments du ContextMenu sont dans un arbre visuel différent du TreeViewItems.

Questions connexes