2009-07-22 113 views
30

每当我创建一个新的WPF应用程序或WPF用户控件库,该AssemblyInfo.cs文件包括以下属性:什么是ThemeInfo属性?

[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属性呢?如果我删除它,我会打破任何东西吗?

+1

男人,我很高兴我偶然发现了这个!由于我构建了自定义BaseView,然后移动到另一个项目,因此我得到一个空白/黑色窗口。添加这个固定它! – Heliac 2013-07-29 10:18:24

回答

16

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

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

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

+4

但这是什么意思?什么是“主题字典”?什么是“通用字典”?他们是为了什么?它们很重要吗?而且,就像我在我的问题中提到的那样,如果我删除了该属性,是否会损坏任何内容? – 2009-07-22 04:30:00

+0

正如我知道如果你会删除你的控件不会采取generic.xaml主题,它说什么搜索通用主题 – 2009-07-22 05:01:12

5

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

考虑到Windows可以使用不同的UI主题运行(Aero就是这样一个例子)。微软提供的WPF控件改变了它们的外观以适应不同的环境主题。

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

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

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