【问题标题】:Background color for MenuItem not changed on MouseOver鼠标悬停时 MenuItem 的背景颜色未更改
【发布时间】:2013-08-12 19:18:50
【问题描述】:

我有一个包含三个项目的菜单,当鼠标悬停在任何项目上时,我正在尝试更改背景颜色。我已经尝试过 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>    

【问题讨论】:

  • 你想要什么具体的行为?我试过你的代码减去不必要的菜单样式,它在鼠标悬停时改变了颜色。在我的测试中,它突出显示了整个菜单,而不仅仅是单个项目。
  • 也许在您的触发器上尝试不同的颜色?它原本是黑色的,如果鼠标悬停,则将其设置为黑色......没有区别。
  • 现在的背景是黑色的,文字是白色的。您选择“搜索”,三个项目显示在黑色背景的下拉列表中。但是当鼠标悬停在其中任何一个上时,背景是浅蓝色的。因此,对于白色文本,它们很难阅读。
  • 我必须对上面的代码进行更新。 Style="{StaticResource MenuItemStyle}" 用于第一个菜单项(在工具提示之后),以查看它是否适用于剩余的菜单项。

标签: wpf visual-studio-2012


【解决方案1】:

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

代码中的另一个警告:由于您直接在MenuItems 上设置Background,因此您的StyleTrigger 无论如何都不起作用。由于DependencyProperty value precedence,您在项目上设置的本地值不能被Style Trigger 覆盖。

【讨论】:

  • 非常感谢您的建议和链接。期待查看“向我展示模板”程序。
猜你喜欢
  • 1970-01-01
  • 2013-10-07
  • 2010-12-25
  • 1970-01-01
  • 1970-01-01
  • 2015-09-29
  • 2011-04-14
  • 1970-01-01
相关资源
最近更新 更多