Kop*_*ick 4 c# wpf triggers styles contextmenu
这是我想要做的:
<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>
...
Run Code Online (Sandbox Code Playgroud)
但它显然不起作用,因为Property="TreeViewItem.ContextMenu.IsOpen"不被认可。对我需要更改的内容有什么建议吗?
您可以使用 DataTrigger 绑定到上下文菜单的 IsOpened 属性:
<DataTrigger Binding="{Binding ContextMenu.IsOpen, RelativeSource={RelativeSource Self}}" Value="True">
<Setter Property="Background" Value="Green"/>
</DataTrigger>
Run Code Online (Sandbox Code Playgroud)
不幸的是,由于 TreeView 中的所有项目共享相同的 ContextMenu,这将一次突出显示所有项目。似乎没有一个属性可以让您找出哪个 FrameworkElement 打开了 ContextMenu。
您可以处理 TreeViewItem 上的 ContextMenuOpening 和 ContextMenuClosing 事件,因为这些事件将从处理单击的控件冒泡并通过正确的 TreeViewItem。如果您想在 XAML 中执行此操作,您可以使用 EventTrigger 来启动更改您的属性的一帧动画。最干净的选择可能是编写处理 ContextMenuOpening 和 ContextMenuClosing 事件的附加行为,并在上下文菜单打开时将附加属性设置为 true。