MouseOver使用重写的ControlTemplate在ContextMenu上触发。它来自哪里?

时间:2010-03-07 19:30:28

标签: .net wpf controltemplate

我有这个非常简单的ControlTemplate:

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

我创造了一个漂亮的下颚美丽圆角!但是,当我将鼠标指向上下文菜单时,MouseOver触发器会从某个地方触发,该界面在我漂亮的圆形边框顶部绘制一个非常难看的近似方形边框!

它来自哪里?

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

1 个答案:

答案 0 :(得分:0)

您可以将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 and Checked事件仍会正常触发。