MenuItem的背景颜色在MouseOver上未更改

时间:2013-08-12 19:18:50

标签: wpf visual-studio-2012

我有一个包含三个项目的菜单,当鼠标悬停在任何项目上时,我正在尝试更改背景颜色。我试过IsMouseOver& IsHighlighted触发属性并且都不起作用。

在我的App.xaml中:

<Style TargetType="MenuItem" x:Key="MenuItemStyle" >
        <Style.Triggers>
            <Trigger Property="MenuItem.IsHighlighted" Value="true">
                <Setter Property="Background" Value="Black"/>
            </Trigger>
        </Style.Triggers>          
    </Style>

在我的Main.xaml中:

<Menu HorizontalAlignment="Left" Height="30" VerticalAlignment="Top" Width="975
          " FontFamily="Tempus Sans ITC" FontSize="16"  >
        <Menu.Background>
            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                <GradientStop Color="#FFC8C8C8" Offset="0"/>
                <GradientStop Color="Black" Offset="1"/>
            </LinearGradientBrush>
        </Menu.Background>
        <Menu.Foreground>
            <SolidColorBrush Color="#FFFFFFFB"/>
        </Menu.Foreground>
        <MenuItem Header="New" Click="MenuNew_Click" VerticalAlignment="Center" Padding="15,4,8,3" Width="60">
            <MenuItem.ToolTip>
                <ToolTip>
                    Add new Park
                </ToolTip>
            </MenuItem.ToolTip>
        </MenuItem>
        <MenuItem Header="Search" Width="65" Padding="12,4,8,3"  >
            <MenuItem.ToolTip>
                <ToolTip> Select search option</ToolTip>
            </MenuItem.ToolTip>
            <MenuItem Header="Name" Background="Black" FontSize="14" Style="{StaticResource MenuItemStyle}" />
            <MenuItem Header="ID" Background="Black" FontSize="14"/>
            <MenuItem Header="OwnerName" Background="Black" FontSize="14"/>
        </MenuItem>          
    </Menu>    

1 个答案:

答案 0 :(得分:1)

ControlTemplate的默认MenuItem(由Show Me The Template提取)未在鼠标悬停时设置MenuItem.Background属性,它会直接在模板中设置元素。不幸的是,这意味着您无法仅更改突出显示颜色,但您必须重新创建整个ControlTemplateMSDN有一个如何执行此操作的示例(这个来自.NET 3.5,但应该适用于4.0或4.5)。

您的代码中另一个警告:由于您直接在Background上设置MenuItem,因此Style的{​​{1}}无论如何都无效。由于DependencyProperty value precedence,您在商品上设置的本地值无法被Trigger Style覆盖。