我对WPF主题感到有些困惑。我希望在Vista、Windows 7和Windows 8上看起来一样。因此,我已经相应地为这些组件设置了样式,但在Windows 8上运行时会出现问题。例如,我有一个组合框,我正在通过xaml更改它的默认背景,就像这样。
<Style TargetType="{x:Type ComboBox}" >
<Setter Property="FontStyle" Value="Normal"/>
<Setter Property="Height" Value="24" />
<Setter Property="Background" Value="{StaticResource GradientButtonBackgroundBrush}"/>
</Style>
组合框的“背景”属性在Windows 8中没有效果,我只能得到一个扁平的矩形,在右侧有一个箭头(这是Windows 8默认的组合框,设计相当不好!)。
那么,我的问题是如何使所有版本的Windows上的组合框外观相同。我尝试在我的App.xaml中添加Windows Aero主题,如下所示,但它对组合框显示没有影响。以下是我添加Aero主题的方法:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/PresentationFramework.Aero;component/themes/aero.normalcolor.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
还有一个关于主题的疑问。我在Windows 7机器上构建wpf应用程序,默认情况下(我相信)设置了Aero主题。因此,在Windows 7机器上查看时,我的所有样式都基于Aero主题。如果我在XP上运行应用程序会发生什么?那么我是否需要像上面代码中列出的那样在App.xaml中添加资源字典(Aero主题)的条目?
我知道我的问题有点模糊,但请相信我,在不同的Windows版本上使用wpf的默认主题确实让我感到非常困惑。
编辑: 我仍然无法根据我的需求设置combobox的样式。combobox仍然显示为灰色矩形。
这是我做的。我从Microsoft的网站下载了Aero.NormalColor.xaml,并将其包含在应用程序的themes文件夹中。然后我在App.xaml中添加了以下内容。
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Themes/Aero.NormalColor.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
然后我编译了应用程序并在Windows 8上部署。仍然是之前显示的相同的下拉框。请注意,所有其他元素都按照主题正确地进行了样式化。我对Luna.Metallic.xaml做了同样的操作,每个元素都被样式化了,除了ComboBox。
我认为当我加载特定主题时,它会使用ControlTemplate定义样式,然后WPF应该选择它。我很困惑为什么只有ComboBox即使给它Aero(或Luna)控件模板也不改变其外观。有任何想法吗?
编辑-2 Windows 8上下拉框外观的屏幕截图