【问题标题】:What is the ThemeInfo attribute for?ThemeInfo 属性有什么用?
【发布时间】:2010-11-12 21:02:54
【问题描述】:

每当我创建新的 WPF 应用程序或 WPF 用户控件库时,AssemblyInfo.cs 文件包含以下属性:

[assembly: ThemeInfo(
    ResourceDictionaryLocation.None, 
    //where theme specific resource dictionaries are located
    //(used if a resource is not found in the page, 
    // or application resource dictionaries)
    ResourceDictionaryLocation.SourceAssembly 
    //where the generic resource dictionary is located
    //(used if a resource is not found in the page, 
    // app, or any theme specific resource dictionaries)
)]

ThemeInfo 属性有什么用?如果我删除它会破坏任何东西吗?

【问题讨论】:

  • 伙计,我很高兴我偶然发现了这个!由于我构建了一个自定义 BaseView 然后移动到另一个项目,我得到了一个空白/黑色窗口。添加这个修复它!

标签: c# wpf xaml themes assemblyinfo


【解决方案1】:

ThemeInfo 属性指定自动主题机制应在何处查找主题字典和通用字典。每个选项都可以设置为以下值之一:

  • 无(默认):不查找资源字典。
  • SourceAssembly:字典是当前程序集。
  • ExternalAssembly:字典在不同的程序集中,必须命名 <AssemblyName>.<ThemeName>.dll,其中<AssemblyName> 是当前程序集的 名字。

如果主题词典为在外部程序集中定义的控件指定样式,例如,System.Windows.Controls.ProgressBarSystem.Windows.Button 等 WPF 控件,则必须使用 ThemeDictionaryExtension 将应用程序指定为主题词典。

【讨论】:

  • 但这意味着什么?什么是“主题词典”?什么是“通用词典”?它们是干什么用的?它们重要吗?而且,就像我在问题中所问的那样,如果我删除该属性,我会破坏任何东西吗?
  • 据我所知,如果您将删除您的控件不会从 generic.xaml 获取主题,它会说明在哪里搜索通用主题
  • 谢谢!我一直在疯狂地尝试将基于主题的样式应用于外部定义的控件。我不知道ThemeDictionaryExtension。一旦我添加了它,一切终于奏效了!再次感谢!!
【解决方案2】:

WPF 框架在控件库中使用此属性作为将资源应用于控件的便捷方式。

考虑可以使用不同的 UI 主题运行 Windows(Aero 就是这样一个例子)。 Microsoft 提供的 WPF 控件会根据不同的环境主题更改其外观。

如果您的应用程序需要这种行为,那么您可以在控件库项目的themes 文件夹中创建不同的主题字典。

即使您不需要多主题支持,也可以方便地将资源放在generic.xaml 文件中,以便程序集中的控件可以访问它们。也许您的元素(控件)是在没有 .xaml 部分类的 .cs 文件中定义的,并且您需要在某个地方存储它所需的资源,或者(更有可能)您拥有将在许多 WPF 元素之间共享的资源相同的项目/程序集。

您在此处引用的属性是这些资源映射的元数据。

【讨论】:

  • 所以如果我使用标准主题控件(如 Button)就不需要该属性?只有在以下情况下我才需要它:(a) 我从头开始编写自己的控件,需要在 Aero 和 Luna 等中看起来不同,或者 (b) 我的程序集有一个 generic.xaml 文件?在任何一种情况下,默认值都不起作用,我需要该属性?
  • 是的,您在这里的方向是正确的,但我在谈论您自己的控件时,没有任何“默认”资源。您可能通过“generic.xaml”文件获得的唯一默认值。该字典中的资源将被特定于主题的资源字典条目(如果存在)覆盖。
猜你喜欢
  • 2013-08-08
  • 2014-09-12
  • 1970-01-01
  • 2012-10-19
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多