根据用户主题应用不同的样式

时间:2013-09-26 14:11:54

标签: wpf

我有一个WPF应用程序,我在其中稍微更改了默认样式,添加了一些常见的填充或边距,或类似的东西。我通常在Window.Resources或某些资源字典中执行此操作,我会在窗口或应用程序的资源中加载。一个示例风格可能是这样的:

<Style TargetType="{x:Type Button}">
    <Setter Property="Margin" Value="5" />
</Style>

到目前为止一切顺利。请注意,我正在更改默认组件,而不是用户组件。

今天我注意到Windows 8中使用的 Aero2 主题提供了一些不同于我在Windows 7的 Aero 主题中使用的标准样式。不幸的是,我真的不能制作一个只适用于两者的通用风格。

因此,我希望能够指定不同的样式,具体取决于用户使用的主题。例如,如果用户正在使用 Aero ,我想在Windows 8上加载Aero-styles.xaml,如果它是 Aero2 ,我想加载{{1}而不是。

我希望通过使用 Themes 目录并提供Aero2-styles.xamlAero.NormalColor.xaml来实现这一目标。不幸的是,这似乎仅适用于自定义控件,而不适用于内置控件。它也不会使可用的密钥可用作静态/动态参考。

有办法做到这一点吗?可能提供一个包含自定义的基本资源字典,然后是另一个与主题相关的字典,并对使用过的主题进行微调?

1 个答案:

答案 0 :(得分:-1)

在启动时检测主题(在加载任何UI之前),并动态地将适当的ResourceDictionary添加到Application.Resources.MergedDictionaries。 这对我有用。