C# XAML中ContextMenu.IsOpen上的触发器
以下是我想做的:C# XAML中ContextMenu.IsOpen上的触发器,c#,wpf,triggers,contextmenu,styles,C#,Wpf,Triggers,Contextmenu,Styles,以下是我想做的: <Style x:Key="TreeViewItemStyle"> <Setter Property="TreeViewItem.ContextMenu" Value="{StaticResource ContextMenu}" /> <Style.Triggers> <Trigger Property="TreeViewItem.ContextMenu.IsOpen" Value="Tr
<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=“treevieItem.ContextMenu.IsOpen”
。对我需要更改的内容有何建议?您可以使用DataTrigger绑定到上下文菜单的IsOpen属性:
<DataTrigger Binding="{Binding ContextMenu.IsOpen, RelativeSource={RelativeSource Self}}" Value="True">
<Setter Property="Background" Value="Green"/>
</DataTrigger>
不幸的是,由于TreeView中的所有项目共享同一个ContextMenu,这将同时突出显示所有项目。似乎没有一个属性可以让您找出哪个FrameworkElement打开了ContextMenu
您可以在TreeViewItem上处理ContextMenuOpening和ContextMenuClosing事件,因为这些事件将从处理单击并通过右TreeViewItem的控件中弹出。如果要在XAML中执行此操作,可以使用EventTrigger启动一帧动画,以更改属性。最干净的选项可能是编写一个附加行为,该行为处理ContextMenuOpening和ContextMenuClosing事件,并在上下文菜单打开时将附加属性设置为true 我如何使我的文章格式XAML更好一点呢?:)使用缩进或反引号。