2009-07-22 147 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元素/部件。

您在這裏引用的屬性是這些資源映射的元數據。