在MouseOver上更改MenuItem的背景颜色

时间:2016-01-19 23:05:38

标签: wpf xaml wpf-controls

我想在mouseOver上更改MenuItem的默认背景颜色。这是我的xaml代码:

enter image description here

风格:

findstr

控制:

findstr /?

所以我有鼠标悬停触发器,如果​​鼠标结束,它应该将背景颜色变为黄色,但它显示默认的浅灰色,如snap中所示

有人能告诉我如何在鼠标悬停时获得背景颜色黄色吗?

2 个答案:

答案 0 :(得分:16)

您的样式未应用,因为MenuItem的默认控件模板有一个触发器,当" IsHighlighted"是真的。 ControlTemplate的触发器始终优先于样式触发器。

将此添加到您的样式设置器:

<Setter Property="Template">
<Setter.Value>
    <ControlTemplate TargetType="{x:Type MenuItem}">
        <Border x:Name="Bd" Padding="17,0,17,0" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True" Uid="Border_38">
            <ContentPresenter x:Name="ContentPresenter"  Content="{TemplateBinding Header}" Grid.Column="1" ContentSource="Header" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Uid="ContentPresenter_33"/>
        </Border>
        <ControlTemplate.Triggers>
            <Trigger Property="IsHighlighted" Value="True">
                <Setter Property="Background" TargetName="Bd" Value="Yellow"/>
                <Setter Property="BorderBrush" TargetName="Bd" Value="#FF26A0DA"/>
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>
</Setter.Value>
</Setter>

答案 1 :(得分:1)

我简化了示例。

在参考资料中定义:

<Style
    x:Key="MenuItemStyle"
    TargetType="{x:Type MenuItem}">
    <Setter Property="Background" Value="Transparent" />
    <Setter Property="Foreground" Value="WhiteSmoke" />
    <Style.Triggers>
        <Trigger Property="IsHighlighted" Value="True">
            <Setter Property="Foreground" Value="Black" />
            <Setter Property="Background" Value="WhiteSmoke" />
        </Trigger>
    </Style.Triggers>
</Style>

然后在MenuItem中使用它:

<MenuItem
    Header="_File"
    Style="{StaticResource MenuItemStyle}">