设置为黑色时的 WPF 菜单项颜色在禁用时不会更改为灰色

Fra*_*ank 4 wpf

当顶部菜单项前景设置为黑色并且背景设置为白色时,XP 和 Windows 7 一切正常。但我们使用的是黑色和白色前景的主菜单栏。这只会在 Windows 7 中导致问题。为什么当您将菜单项前景设置为黑色时,它在禁用时不会变为灰色。

Eri*_*ric 5

我在使用 Windows XP 和 7 时遇到了同样的问题。

Foreground="Black" 属性覆盖作为 IsEnabled 函数的内置样式触发器。

要完成您正在寻找的内容,需要使用 IsEnabled 上的触发器构建您自己的样式。以下代码显示了如何内联执行此操作,尽管您可能希望将 Style 拉入资源部分并在所有菜单项上使用它。

<MenuItem Header="My Item" IsEnabled="{Binding MyItemEnabled}">
    <MenuItem.Style>
        <Style TargetType="{x:Type MenuItem}">
            <Setter Property="Foreground" Value="Black"/>
            <Style.Triggers>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Foreground" Value="Gray"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </MenuItem.Style>
</MenuItem>
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,不是让触发器将 Foreground 属性设置为 Gray,更好的方法是将 Opacity 属性设置为 50。 (5认同)
  • 我不知道这是否只是版本的不同,但 `Opacity` 是双重的;启用时应设置为 1.0,禁用时应设置为 0.5。 (3认同)