【问题标题】:Trigger on ContextMenu.IsOpen in XAML在 XAML 中触发 ContextMenu.IsOpen
【发布时间】:2011-03-06 18:20:07
【问题描述】:

这就是我想要做的:

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

【问题讨论】:

  • 我怎样才能让我的 XAML 格式的帖子更好一些? :)
  • 使用缩进反引号。

标签: c# wpf triggers contextmenu styles


【解决方案1】:

您可以使用 DataTrigger 绑定到上下文菜单的 IsOpened 属性:

<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。

【讨论】:

    猜你喜欢
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多