WPF - MenuItem 突出显示有不需要的辅助突出显示

标签 wpf button wpf-controls contextmenu highlighting

我在 Button 上有一个 ContextMenu,显示时它会显示一个菜单项列表,这很好。如果我将鼠标移到菜单中的某个项目上,它会高亮显示,但当我将鼠标悬停在文本上方和周围时,我也会得到一个辅助高亮显示,请参见下图。

incorrect-image

如何删除它?我已经尝试了所有类型的样式、触发器和各种其他模板来删除突出显示,但似乎无法正常工作或显示。

我的上下文菜单按钮也没有什么特别之处,请参见下面的 wpf。

<Button.ContextMenu>
    <ContextMenu ItemsSource="{Binding SelectedTreeItem.MetaTargets}">
        <ContextMenu.ItemTemplate>
            <DataTemplate >
                <MenuItem Header="{Binding Name}"
                          Command="{Binding Path=SelectedTreeItem.AddTargetCommandRelay, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"
                          CommandParameter="{Binding}"
                 />
            </DataTemplate>
        </ContextMenu.ItemTemplate>
    </ContextMenu>
</Button.ContextMenu>

理想情况下,我希望它在突出显示时看起来像这样,无论鼠标在突出显示项目范围内的哪个位置,请参见下图。

enter image description here

最佳答案

只需从默认 MenuItem 模板中删除 Property="IsHighlighted" 触发器:

<ControlTemplate TargetType="{x:Type MenuItem}">
    <Grid SnapsToDevicePixels="True">
        <Rectangle x:Name="Bg" Fill="{TemplateBinding Background}" RadiusY="2" RadiusX="2" Stroke="{TemplateBinding BorderBrush}" StrokeThickness="1"/>
        <Rectangle x:Name="InnerBorder" Margin="1" RadiusY="2" RadiusX="2"/>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition MinWidth="24" SharedSizeGroup="MenuItemIconColumnGroup" Width="Auto"/>
                <ColumnDefinition Width="4"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="37"/>
                <ColumnDefinition SharedSizeGroup="MenuItemIGTColumnGroup" Width="Auto"/>
                <ColumnDefinition Width="17"/>
            </Grid.ColumnDefinitions>
            <ContentPresenter x:Name="Icon" Content="{TemplateBinding Icon}" ContentSource="Icon" Margin="1" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center"/>
            <Border x:Name="GlyphPanel" BorderBrush="#FFCDD3E6" BorderThickness="1" Background="#FFE6EFF4" CornerRadius="3" Height="22" Margin="1" Visibility="Hidden" Width="22">
                <Path x:Name="Glyph" Data="M0,5.1L1.7,5.2 3.4,7.1 8,0.4 9.2,0 3.3,10.8z" Fill="#FF0C12A1" FlowDirection="LeftToRight" Height="11" Width="9"/>
            </Border>
            <ContentPresenter ContentTemplate="{TemplateBinding HeaderTemplate}" Content="{TemplateBinding Header}" Grid.Column="2" ContentStringFormat="{TemplateBinding HeaderStringFormat}" ContentSource="Header" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
            <TextBlock Grid.Column="4" Margin="{TemplateBinding Padding}" Text="{TemplateBinding InputGestureText}"/>
        </Grid>
    </Grid>
    <ControlTemplate.Triggers>
        <Trigger Property="Icon" Value="{x:Null}">
            <Setter Property="Visibility" TargetName="Icon" Value="Collapsed"/>
        </Trigger>
        <Trigger Property="IsChecked" Value="True">
            <Setter Property="Visibility" TargetName="GlyphPanel" Value="Visible"/>
            <Setter Property="Visibility" TargetName="Icon" Value="Collapsed"/>
        </Trigger>
        <Trigger Property="IsHighlighted" Value="True">
            <Setter Property="Fill" TargetName="Bg">
                <Setter.Value>
                    <LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
                        <GradientStop Color="#34C5EBFF" Offset="0"/>
                        <GradientStop Color="#3481D8FF" Offset="1"/>
                    </LinearGradientBrush>
                </Setter.Value>
            </Setter>
            <Setter Property="Stroke" TargetName="Bg" Value="#8071CBF1"/>
            <Setter Property="Stroke" TargetName="InnerBorder" Value="#40FFFFFF"/>
        </Trigger>
        <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Foreground" Value="#FF9A9A9A"/>
            <Setter Property="Background" TargetName="GlyphPanel" Value="#FFEEE9E9"/>
            <Setter Property="BorderBrush" TargetName="GlyphPanel" Value="#FFDBD6D6"/>
            <Setter Property="Fill" TargetName="Glyph" Value="#FF848589"/>
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

关于WPF - MenuItem 突出显示有不需要的辅助突出显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16901600/

相关文章:

c# - 从 .NET 开始 - ASP.NET、WPF、Silverlight 或命令行 C#?

c# - WPF : Glyph right-to-left text rendering

Java AWT - 最后添加的按钮未显示

html - 显示器上的边距产生不同的效果

c# - WPF 中的数据网格显示空白行和列

c# - WPF应用程序OnStartup出现System.IO.FileLoadException的原因

c# - WPF C# 以编程方式添加和移动选项卡

css - 更改边框样式时,按钮在 IE 和 Firefox 中失去默认边框圆 Angular ,但在 Opera、Chrome 和 Safari 中工作正常

wpf-controls - 如何使我的子派生自定义控件出现在 Blend Assets 库中?

WPF 单选按钮 IsChecked 不起作用