2010-06-22 7 views
1

Voici ce que je suis en train de faire:Trigger sur ContextMenu.IsOpen en XAML

<Style x:Key="TreeViewItemStyle"> 
    <Setter Property="TreeViewItem.ContextMenu" Value="{StaticResource ContextMenu}" /> 
     <Style.Triggers> 
      <Trigger Property="TreeViewItem.ContextMenu.IsOpen" Value="True"> 
       <Setter Property="TreeViewItem.BitmapEffect"> 
        <Setter.Value> 
         <OuterGlowBitmapEffect GlowColor="Yellow" GlowSize="2"/> 
        </Setter.Value> 
       </Setter> 
      </Trigger> 
     </Style> 
    ... 

Mais il est évidemment ne fonctionne pas parce que Property="TreeViewItem.ContextMenu.IsOpen" n'est pas reconnu. Des suggestions à ce que j'ai besoin de changer?

+0

Et comment est-ce que je rends le format XAML un peu plus agréable? :) – KopfSick

+0

Utilisez indentation _ ou_ backquotes. –

Répondre

2

Vous pouvez lier à la propriété IsOpened du menu contextuel à l'aide d'un DataTrigger:

<DataTrigger Binding="{Binding ContextMenu.IsOpen, RelativeSource={RelativeSource Self}}" Value="True"> 
    <Setter Property="Background" Value="Green"/> 
</DataTrigger> 

Malheureusement, étant donné que tous les éléments TreeView partagent la même ContextMenu, qui mettra en valeur tous à la fois. Il ne semble pas y avoir une propriété qui vous permet de savoir quel FrameworkElement a ouvert le ContextMenu.

Vous pouvez gérer les événements ContextMenuOpening et ContextMenuClosing sur TreeViewItem, car ceux-ci surgiront du contrôle qui a géré le clic et passeront par le TreeViewItem droit. Si vous voulez le faire en XAML, vous pouvez utiliser un EventTrigger pour démarrer une animation d'une image qui modifie votre propriété. L'option la plus propre peut consister à écrire un comportement attaché qui gère les événements ContextMenuOpening et ContextMenuClosing et définit une propriété attachée sur true lorsque le menu contextuel est ouvert.