如何修改我的菜单,使其始终显示颜色,而不是像这样:
这是我的代码:
<DockPanel>
<Menu DockPanel.Dock="Right"
Height="30"
VerticalAlignment="Top"
Background="#2E404B"
BorderThickness="2.6"
Foreground="#FFAA00">
<Menu.BitmapEffect>
<DropShadowBitmapEffect Direction="270" ShadowDepth="3" Color="#2B3841"/>
</Menu.BitmapEffect>
<MenuItem Header="File" >
<MenuItem Header="New Build" Background="#2E404B"></MenuItem>
<Separator />
<MenuItem Header="Exit" Background="#2E404B"></MenuItem>
</MenuItem>
<MenuItem Header="Edit" >
<MenuItem Header="Language" Background="#2E404B"></MenuItem>
<MenuItem Header="Display Mode" Background="#2E404B"></MenuItem>
<Separator />
<MenuItem Header="Settings" Background="#2E404B"></MenuItem>
</MenuItem>
<MenuItem Header="View" >
</MenuItem>
<MenuItem Header="About" >
</MenuItem>
</Menu>
</DockPanel>
另外,我意识到我在MenuItem的所有实例中都设置了颜色,如果有人能告诉我一种更有效的方式,那也是很棒的。 :d
答案 0 :(得分:4)
难点在于您需要的颜色深埋在Menu
主题样式中。这些主题样式是WPF附带的一些最复杂的主题样式。它们由10-20种样式和模板组成。
一般来说,我建议创建类似于itowlson答案中的样式,因为它允许您优雅地适应当前的Windows主题,只替换您想要的属性和模板,并保留其他所有内容。
在你的情况下,通过添加单个标签来重复覆盖主题样式很可能是徒劳的。幸运的是,您不需要这样做。
显然,您实际上是尝试从用户体验的角度创建自己的自定义主题,那么为什么不在代码中实际创建自己的主题?您可以通过从Aero或Luna(根据您的喜好)复制主题并更改您想要的任何内容来轻松完成此操作。
使用Expression Blend非常简单。只是:
Edit Control Parts (Template) > Edit a Copy...
。Apply to All
,然后点击New
旁边的Resource dictionary
现在,您可以对MyMenuTheme.xaml进行任何更改,以影响应用程序中所有菜单的外观。此文件将长达数百行,但通常很容易找到要更改的正确设置。在您的情况下,它将是背景设置的各种默认值。
请注意,如果您没有Expression Blend,您还可以使用反射器和BAMLViewer来获取主题样式,但这需要更多工作,因为您必须手动选择所需的样式和其他资源。 / p>
答案 1 :(得分:0)
要在所有MenuItem实例上设置背景,请为MenuItem定义样式:
<Style x:Key="{x:Type MenuItem}">
<Setter Property="Background" Value="#2E404B" />
</Style>
你应该能够对Separator类进行同样的操作来抛光剩余的位,但是由于对比度问题,你可能想要设置整个模板的样式而不仅仅是背景。
或者,您可能需要/想要劫持MenuItem.SeparatorStyleKey
,MenuItem.TopLevelItemTemplateKey
等。
答案 2 :(得分:0)
转到App.xaml或使用Ctrl + F查找此吸盘
<SolidColorBrush x:Key="SubMenuBackgroundBrush" Color="#FF9B9B9B"/>