33

每当我创建新的 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属性有什么用?如果我删除它会破坏任何东西吗?

4

2 回答 2

19

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

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

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

于 2009-07-22T04:18:39.050 回答
5

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

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

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

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

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

于 2009-07-22T06:17:21.930 回答