【问题标题】:Apply different styles depending on user theme根据用户主题应用不同的样式
【发布时间】:2013-09-26 14:11:54
【问题描述】:

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

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

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

今天我注意到在 Windows 8 中使用的 Aero2 主题与我习惯的 Windows 7 的 Aero 主题有一些不同的标准样式。不幸的是,我并没有真正能够制作出一种适用于两者的通用样式。

所以,我希望能够指定不同的样式,具体取决于用户使用的主题。例如,如果用户使用的是Aero,我想加载Aero-styles.xaml,如果是Windows 8 上的Aero2,我想加载Aero2-styles.xaml

我希望这可以通过使用 Themes 目录并提供 Aero.NormalColor.xamlAero2.NormalColor.xaml 来实现。不幸的是,这似乎只适用于 custom 控件,而不适用于内置控件。它也不会使可用的键可用作静态/动态参考。

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

【问题讨论】:

标签: wpf


【解决方案1】:

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

【讨论】:

  • 你能提供一个如何做到这一点的例子吗?特别是在 theme-detection 部分?到目前为止,我发现的所有解决方案都非常老套,或者无法检测到 Windows 8 的“Aero2”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-07
  • 1970-01-01
  • 2015-05-29
相关资源
最近更新 更多