Question

J'ai une configuration de sorte que chaque TreeView a droit TreeViewItem clic menu contextuel appliqué comme Style. Quelque chose comme:

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

Saveable, Copiable et Removeable sont des propriétés qui viennent de l'objet qui est utilisé comme MenuItem.

Ce que je suis à la recherche est lorsque l'utilisateur clique sur un object.Save(), il cliquez sur la méthode appropriée de l'objet sélectionné. Cliquez ainsi sur le « Enregistrer » appellerait object.Copy() <=>, « Copier » appelle <=>, etc. Mais je ne suis pas sûr de ce que la syntaxe ressemblerait, ou si l'idée est en fait acceptable en termes de type le style WPF. Je sais que je peux créer un nouveau gestionnaire d'événements dans la fenêtre englobant, mais je préfère l'élément sélectionné lui-même pour gérer l'événement.

Pensées

Merci!

Était-ce utile?

La solution

Malheureusement, je ne pense pas qu'il y ait un moyen automatisé de le faire. L'option la plus proche serait d'installer un pour chaque élément RoutedUICommand dans le ContextMenu, puis créer un pour chacun dans CommandBinding votre classe. Si vous voulez aller à ceux du TreeViewItem, vous aurez probablement besoin de sous-classe et mettre en place CommandBindings la EventSetter là.

La seule option que je pensais pourrait fonctionner serait d'ajouter un pour MenuItem.Click au style TreeViewItems <=>. Cependant, cela ne fonctionne pas -. Probablement parce que les éléments du sont dans un <=> arbre visuel différent de <=>

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top