如何在MouseOver上删除/更改MenuItem / ContextMenu的高亮颜色?

时间:2016-12-23 13:36:18

标签: c# wpf xaml contextmenu menuitem

如何在MouseOver上删除/更改MenuItem / ContextMenu的高亮颜色?我尝试编辑ContextMenu模板并在MouseOver上设置MenuItem的样式,但默认的HiglightedColor在MouseOver上是stil。

<Style TargetType="{x:Type ContextMenu}">
                    <Setter Property="SnapsToDevicePixels"
              Value="True" />
                    <Setter Property="OverridesDefaultStyle"
              Value="True" />
                    <Setter Property="Grid.IsSharedSizeScope"
              Value="true" />
                    <Setter Property="HasDropShadow"
              Value="True" />
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type ContextMenu}">
                                <Border x:Name="Border"
                    Background="Black"
                    BorderThickness="0">
                                    <Border.BorderBrush>
                                        <SolidColorBrush Color="Black" />
                                    </Border.BorderBrush>
                                    <StackPanel IsItemsHost="True"
                          KeyboardNavigation.DirectionalNavigation="Cycle" />
                                </Border>
                                <ControlTemplate.Triggers>
                                    <Trigger Property="HasDropShadow"
                       Value="true">
                                        <Setter TargetName="Border"
                        Property="Padding"
                        Value="0,0,0,0" />
                                        <Setter TargetName="Border"
                        Property="CornerRadius"
                        Value="0" />
                                    </Trigger>
                                    <Trigger Property="IsMouseOver"  Value="True">
                                        <Setter Property="BorderBrush" Value="Transparent"/>
                                        <Setter Property="Background"  Value="Transparent"/>
                                    </Trigger>
                                </ControlTemplate.Triggers>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>

<Style TargetType="{x:Type MenuItem}">
                    <Style.Triggers>
                        <Trigger Property="IsHighlighted" Value="True">
                            <Setter Property="Background" Value="Transparent"></Setter>
                        </Trigger>
                        </Trigger>
                        <Trigger Property="IsMouseOver" Value="true">
                            <Setter Property="Background" Value="Transparent">

                            </Setter>
                        </Trigger>
                    </Style.Triggers>
                </Style>

1 个答案:

答案 0 :(得分:2)

您必须覆盖MenuItem默认模板并在IsHighlighted属性上设置触发器:

<ContextMenu>
    <ContextMenu.Resources>
        <Style TargetType="{x:Type MenuItem}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type MenuItem}">
                        <Border Background="{TemplateBinding Background}">
                            <ContentPresenter Content="{TemplateBinding Header}" Margin="35 5 10 5" />
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsHighlighted" Value="True">
                                <Setter Property="Background"  Value="Green"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ContextMenu.Resources>
    <MenuItem Header="Element 1" />
    <MenuItem Header="Element 2" />
    <MenuItem Header="Element 3" />
</ContextMenu>

要在项目悬停时删除背景,只需将背景颜色设置为Transparent