【问题标题】:How to make a WPF program match the currently selected Windows Theme如何使 WPF 程序匹配当前选择的 Windows 主题
【发布时间】:2012-01-14 00:56:22
【问题描述】:

我想让我的 WPF 应用程序从当前选择的系统主题中绘制。

为了说明,这里是我希望完成的 Windows 窗体版本。

此 Windows 窗体窗口有一个基本的菜单条和一个带有特定主题的工具条。如果用户选择更改主题,它的外观将会改变:

另外,它在 Windows 7 中运行时会切换到 areo 主题。我想在 WPF 中做同样的事情。但我不确定如何根据当前 Windows 主题制作 WPF 窗口样式。此窗口 (xaml) 还具有菜单栏和工具栏控件,但不完全遵循所选的 Windows 主题。

菜单和工具栏控件不保留 XP Luna 主题中的渐变。请注意,与other WPF theming posts 不同,我并不想覆盖用户选择的 Windows 主题。 This question 似乎与我的很接近,但我想为所有控件设置主题以匹配选定的系统主题,除非被覆盖。这需要在每个控制的基础上完成吗?这可以为整个项目配置吗?此MSDN article 仅涵盖自定义控件。

我会很感激有关如何使 WPF 菜单和 WPF 工具栏控件与当前系统主题相匹配的具体示例。

编辑: 知道将菜单设置为什么颜色也很棒,这样系统主题的条纹会出现在菜单项旁边:(在“退出”的左侧)

(“退出”左侧)

【问题讨论】:

    标签: c# .net wpf


    【解决方案1】:

    一种方法是使用系统颜色like these。它们将根据主题进行相应的更改。我不确定是否有更简单的方法,但这是一个很好的方法 =)。下面的列表显示了每个主题的颜色。

    【讨论】:

    • 这是一个很棒的链接!不幸的是我仍然有点难过:我应该设置菜单控件的背景属性,以便在系统工作时呈现主题渐变/w Luna 主题(第一个和第二个屏幕截图)
    • @ford 我不确定...颜色名称应该是自我描述的。我知道这些名称并没有尽可能有用,但至少它缩小了它们的使用范围:) 例如,列表中间有 3 个以“MenuSomething”开头。那些可能就是你要找的。​​span>
    • 您还可以使用此程序通过从 Windows 控制面板更改颜色来测试哪种颜色。这是程序blogs.msdn.com/cfs-file.ashx/__key/…
    • 下面是你如何测试它blogs.msdn.com/b/wpf/archive/2010/11/30/…
    • 是的。当用户切换主题时,这些系统颜色会改变。你试过这个吗? blogs.msdn.com/b/wpf/archive/2010/11/30/…
    【解决方案2】:

    问题在于 WPF 控件在内部与 Windows 窗体或任何其他 GDI 元素非常不同。 WPF 控件的外观是在 .Net 中的不同类的帮助下定义的。不能只是神奇地应用相同的主题。

    因此我会说 - 是的,您应该使用 this question's 答案中的资源文件在每个控件的基础上实现主题化。

    我认为我们很幸运 MS 为我们提供了这些。另一件事是,这些 xaml 样式的存在证明了 WPF 框架的可配置性有多大。

    主题 xaml 文件位于 {Program Files}\Microsoft Expression\Blend 4\SystemThemes\Wpf\

    您最初引用的问题有一个如何在其答案中链接它们的示例:Windows 7 theme for WPF?

    要交换主题,您可以从 Application.Current.Resources.MergedDictionaries 动态添加/删除条目

    您必须自己检测当前主题。

    【讨论】:

    • 我同意你链接到的 SO 问题,但我问这个问题主要是因为我无法完全得到我想要的解决方案。是否需要从某个地方加载这些 xaml 文件(例如 Luna.xaml)?一个在菜单栏或工具箱栏上工作的例子会很棒。
    • 福特,我已经更新了一个答案。我知道您甚至在写问题之前就已经看到了这两个问题,但据我所知,没有更简单、更自动化的方法可以解决您的问题。
    • Maxim,感谢您的帮助。特别值得注意的是我需要自己检测主题的部分。没有其他地方特别提到这一点。
    猜你喜欢
    • 2011-04-24
    • 2019-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    • 2015-03-19
    • 1970-01-01
    • 2011-07-01
    相关资源
    最近更新 更多