gpt4 book ai didi

c# - 在 XAML 中触发 ContextMenu.IsOpen

转载 作者:行者123 更新时间:2023-11-30 21:20:45 25 4
gpt4 key购买 nike

这是我正在尝试做的事情:

<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" 无法识别。对我需要更改的内容有什么建议吗?

最佳答案

您可以使用 DataTrigger 绑定(bind)到上下文菜单的 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。

关于c# - 在 XAML 中触发 ContextMenu.IsOpen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3092392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com