【问题标题】:How do WPF themes get loaded?WPF 主题如何加载?
【发布时间】:2011-05-06 05:58:54
【问题描述】:

WPF 控件从主题(通常在 PresentationFramework.Aero.dll 中)获取其默认样式、颜色和画笔。

这个程序集的负载是什么?资源字典存储在哪里?

我有自己的 WPF 自定义主题并将它们加载到 Application.Current.Resources.MergedDictionary。 但是,如果 WPF 主题控件托管在 Windows 窗体中,则这不起作用,因为 Application.Current 为空。

有没有办法做类似于 WPF 所做的事情?如果有,是什么?

【问题讨论】:

    标签: wpf wpf-controls themes


    【解决方案1】:

    您不能在 Winforms 中使用 WPF 主题,因为它们是两种不同的技术。 Winforms 本身没有类似的主题机制。您可以在 Winforms 中使用支持主题的第三方控件。其中最著名的是来自 Infragistics 和 Telerik 的工具。

    底线答案是否定的,没有。

    【讨论】:

    • 我不是在询问 Winforms 主题,而是在 WinForms 中托管时的 WPF 主题。
    • 我相信这仍然适用。基础是 Winforms,这意味着它没有主题。
    • Winforms 没有主题,但在 WinForms 中托管的 WPF 有。例如,如果您在 WinForms 中托管 WPF 按钮,则 PresentationFramework.Areo 确实 会被加载。我的问题是谁加载它以及资源字典存储在内存中的什么位置。
    【解决方案2】:

    您可以尝试将主题添加到控件而不是应用程序吗?

    control.Resources.MergedDictionaries.Clear();
    control.Resources.MergedDictionaries.Add(resourceDictionary);
    

    【讨论】:

    • 我的问题的目的是避免向单个控件添加主题。
    【解决方案3】:

    (回答我自己的问题) 将资源字典加载为主题的方法是将其添加到 generic.xaml 资源字典的合并字典列表中。

    没有其他方法可以将资源字典加载为主题。

    在 WinForms 中使用时效果很好

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-12
      • 1970-01-01
      • 1970-01-01
      • 2017-06-15
      相关资源
      最近更新 更多