WPF - 使用触发器设置子菜单样式

时间:2016-04-26 11:14:17

标签: wpf wpf-style

我正在使用MetroDark主题来设置我的WPF应用程序,遗憾的是它没有MenuItem。所以我想改变前景和背景四种状态的菜单项:

  • 正常
  • hovered
  • 禁用

到目前为止,我有这样的代码,当鼠标悬停在菜单项时,它只是设置前景和背景:

<Menu Background="#FF181818" Foreground="#FFABABAB" >
    <Menu.Resources>
        <Style x:Key="{x:Type MenuItem}" >
            <Style.Setters>
                <Setter Property="MenuItem.Background" Value="#FF181818" />
                <Setter Property="MenuItem.Foreground" Value="#FFABABAB" />
            </Style.Setters>
            <Style.Triggers>
                <Trigger Property="MenuItem.IsMouseOver" Value="True">
                    <Setter Property="MenuItem.Background" Value="Green" />
                    <Setter Property="MenuItem.Foreground" Value="Red" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Menu.Resources>
    <MenuItem Header="File">
        <MenuItem Header="New" Command="ApplicationCommands.New"></MenuItem>
        <MenuItem Header="Open" Command="ApplicationCommands.Open"></MenuItem>
        <MenuItem Header="Save" Command="ApplicationCommands.Save"></MenuItem>
        <MenuItem Header="Save As" Command="ApplicationCommands.SaveAs"></MenuItem>
        <Separator Background="#FF181818" Foreground="#FFABABAB"></Separator>
        <MenuItem Header="Delete" Command="ApplicationCommands.Delete"></MenuItem>
        <MenuItem Header="Quit" Click="Quit_MenuItem_Click"></MenuItem>
    </MenuItem>
    <MenuItem Header="Format" Click="Format_MenuItem_Click" ></MenuItem>
    <MenuItem Header="About" ></MenuItem>
</Menu>

结果是: 然而,Foreground的设置适用于Background仅适用于MenuItem,它们是Menu的直接子项,而不是其子菜单项。

enter image description here

enter image description here

我注意到这个Styled MenuItem on WPF,这可能是相关的。但我的问题是,如果没有ControlTemplate,我能解决这个问题吗?我正在寻找一个可以应用于所有其他状态的解决方案,如IsDisabled和IsPressed。

非常感谢!

1 个答案:

答案 0 :(得分:0)

您需要修改模板。在Blend中很容易做到。我建议在Blend中创建一个SimpleMenuItem并编辑该模板的副本。使用默认模板imo时,它们更容易使用。