2010-06-22 33 views
1

這裏就是我想要做的事:觸發ContextMenu.IsOpen在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> 
    ... 

但它顯然不工作,因爲Property="TreeViewItem.ContextMenu.IsOpen"無法識別。對我需要改變的任何建議?

+0

如何讓我的帖子格式XAML更好一點? :) – KopfSick 2010-06-22 10:56:38

+0

使用縮進_或_反引號。 – 2010-06-22 11:02:36

回答

2

您可以綁定到使用DataTrigger上下文菜單的屬性IsOpened:

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

不幸的是,因爲所有的TreeView控件共享相同的文本菜單中的項目,將突出顯示所有這些一次的。似乎沒有一個屬性可以讓你找出哪個FrameworkElement打開了ContextMenu。

您可以在TreeViewItem上處理ContextMenuOpening和ContextMenuClosing事件,因爲這些事件會從處理點擊並通過正確的TreeViewItem的控件中冒出來。如果你想在XAML中做到這一點,你可以使用EventTrigger來啓動一個改變屬性的單幀動畫。最簡潔的選項可能是編寫一個處理ContextMenuOpening和ContextMenuClosing事件的附加行爲,並在上下文菜單打開時將附加屬性設置爲true。