我对 wpf 主题有点困惑。我想让 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 Theme。因此,在 Windows 7 机器上查看时,我所有的样式都基于 Aero 主题。如果我在 XP 上运行应用程序会发生什么。那么我是否需要在 App.xaml 中为资源字典(Aero 主题)添加一个条目,如上面代码中列出的那样?
我知道我的问题有点含糊,但相信我,我真的对不同 Windows 版本上 wpf 的默认主题感到困惑。
编辑: 我仍然无法根据我的需要设置组合框样式。组合框仍然看起来像一个灰色矩形。
这就是我所做的。我从微软网站下载了 Aero.NormalColor.xaml 并包含在应用程序的主题文件夹中。然后我在 App.xaml 中添加了以下内容
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Themes/Aero.NormalColor.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
然后我编译了应用程序并部署在 Windows 8 上。仍然是之前显示的相同组合框。请注意,所有其他元素都会根据主题正确设置样式。我对 Luna.Metallic.xaml 做了同样的事情,除了ComboBox之外,每个元素都设置了样式。
我相信当我加载一个使用ControlTemplate定义样式的特定主题时,它应该由 wpf 选择。我很困惑为什么即使在给它一个 Aero(或 Luna)控制模板之后只有ComboBox不会改变它的外观。有任何想法吗 ?
EDIT-2 Windows 8 上组合框外观的屏幕截图