【问题标题】:MouseOver Trigger firing on ContextMenu with overridden ControlTemplate. Where is it coming from?MouseOver 触发在 ContextMenu 上被覆盖的 ControlTemplate。它来自哪里?
【发布时间】:2010-03-07 19:30:28
【问题描述】:

我有这个非常简单的 ControlTemplate:

<ControlTemplate TargetType="{x:Type ContextMenu}">
                    <Border 
                           Name="Border"
                           Background="{StaticResource BlueBackground}"
                           BorderBrush="LightBlue"
                           CornerRadius="10"
                           BorderThickness="1" >
                        <StackPanel IsItemsHost="True"/>
                    </Border>
                </ControlTemplate>

我创造了一个漂亮的、令人瞠目结舌的圆角!但是,当我将鼠标指向上下文菜单时,鼠标悬停触发器会从某个地方触发,在我漂亮的圆形边框顶部绘制一个非常难看的近乎方形的边框!

哪里来的??

编辑: 最可能的原因是 ContextMenu 是一个包含 MenuItems 的 ItemsControl,即使我的 ContextMenu 包含一个 UserControl。因此,当 IsMouseOver==true 时,UserControl 被视为 MenuItem 并突出显示!禁用此行为的最简单方法是什么?

【问题讨论】:

  • 你在 StackPanel 中有什么有趣的东西吗?给Border 元素添加一些内边距怎么样,看看它是否会有所不同。
  • 我做到了,它做到了,因此进行了编辑。

标签: .net wpf controltemplate


【解决方案1】:

您可以将 ContextMenu 的 ItemContainerStyle 属性设置为 MenuItems 的自定义样式。

<ContextMenu.ItemContainerStyle>
    <Style
        TargetType="MenuItem">
        <Setter
            Property="Template">
            <Setter.Value>
                <ControlTemplate
                    TargetType="MenuItem">
                    <TextBlock
                        Text="{TemplateBinding Header}" />
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ContextMenu.ItemContainerStyle>

使用此策略,您必须为所需的任何鼠标悬停效果创建自己的触发器,但 Click 和 Checked 事件仍将正常触发。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多