MouseOver 使用覆盖的 ControlTemplate 在 ContextMenu 上触发触发。它从哪里来?

发布于 2024-08-23 18:03:24 字数 824 浏览 6 评论 0原文

我有这个非常简单的 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 并突出显示!禁用此行为的最简单方法是什么?

I have this very simple ControlTemplate:

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

I made it to create a nifty jawdroppingly beautiful rounded corner! However, when I point the mouse over a contextmenu a MouseOver Trigger fires from somewhere that draws a terribly ugly nearly square border on top of my nifty rounded border!


Where is it coming from??

EDIT:
The most likely cause is that the ContextMenu is an ItemsControl that holds MenuItems, even when my ContextMenu holds a single UserControl. So the UserControl is seen as a MenuItem and highlighted when the IsMouseOver==true! What is the easiest way to disable this behaviour?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

滥情稳全场 2024-08-30 18:03:24

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

You can set the ItemContainerStyle property of your ContextMenu to a custom style for 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>

With this strategy you have to make your own triggers for any mouse over effects you want, but Click and Checked events will still fire normally.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文