共用方式為


合併的資源字典

更新:2007 年 11 月

Windows Presentation Foundation (WPF) 資源支援合併的資源字典功能。此功能可用於在已編譯的 XAML 應用程式外部定義 WPF 應用程式的資源部分,然後資源就能在應用程式之間共用,並有利於單獨進行當地語系化的工作。

引入合併的資源字典

在標記中,您可以使用下列語法將合併的資源字典引入頁面中:

<Page.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="myresourcedictionary.xaml"/>
      <ResourceDictionary Source="myresourcedictionary2.xaml"/>
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
</Page.Resources>

請注意,ResourceDictionary 項目不具有 x:Key 屬性,然而資源集合中的所有項目通常都需要這個屬性。但 MergedDictionaries 集合內的另一個 ResourceDictionary 參考則為特例,它是保留供此合併的資源字典案例使用。引入合併資源字典的 ResourceDictionary 不可具有 x:Key 屬性。一般而言,MergedDictionaries 集合內的每個 ResourceDictionary 都會指定一個 Source 屬性。Source 的值應為統一資源識別元 (URI),此 URI 會解析為所要合併之資源檔的位置。而該 URI 的目的地必須是以 ResourceDictionary 做為根項目的其他 XAML 檔案。

注意事項:

您可以在指定為合併字典的 ResourceDictionary 內定義資源,做為指定 Source 的替代方法,或在已指定來源所含任何資源以外再加入資源。但這並不是常見案例,合併字典的主要案例是從外部檔案位置合併資源。若要在標記內為頁面指定資源,通常應在主要 ResourceDictionary 中定義這些資源,而非在合併的字典中定義。

合併的字典行為

合併字典中的資源在資源查閱範圍中所佔的位置,正好位在其併入之主要資源字典的範圍之後。雖然資源索引鍵在任何個別的字典中都必須是唯一的,但索引鍵在同一組合併字典內可多次存在。在此情況下,傳回的資源會來自 MergedDictionaries 集合中依順序找到的最後一本字典。若 MergedDictionaries 集合是以 XAML 定義的,則集合中合併之字典的順序就是標記中所提供的項目順序。若同時在主要字典與合併的字典中定義了索引鍵,則會從主要字典傳回資源。這些範圍設定規則 (Rule) 會同樣地套用至靜態資源參考與動態資源參考。

合併的字典與程式碼

合併的字典可透過程式碼加入至 Resources 字典中。針對任何 Resources 屬性而存在的預設、初始為空白的 ResourceDictionary,也會具有預設、初始為空白的 MergedDictionaries 集合屬性。若要透過程式碼加入合併的字典,您必須取得所需之主要 ResourceDictionary 的參考,並取得其 MergedDictionaries 屬性值,然後對 MergedDictionaries 中所包含的泛型 Collection 呼叫 Add。您加入的物件必須是新的 ResourceDictionary。在程式碼中,您無需設定 Source 屬性。您必須建立或載入 ResourceDictionary 物件,以取得此物件。載入現有 ResourceDictionary 的一種方法是,對具有 ResourceDictionary 根目錄的現有 XAML 檔案資料流呼叫 XamlReader.Load,然後將 XamlReader.Load 傳回值傳送至 ResourceDictionary

合併資源字典的 URI

併入合併的資源字典時有多種技術可運用,而這些技術由您要使用的統一資源識別元 (URI) 格式來表示。廣泛而言,這些技術可分成兩種類別:編譯為專案一部分的資源,以及未編譯為專案一部分的資源。

如果是編譯為專案一部分的資源,您可以使用會參照資源位置的相對路徑。在編譯期間會評估相對路徑。您的資源必須透過「資源」建置動作,定義為專案的一部分。如果您在專案中將某個資源 .xaml 檔案併入成為資源,即不需將此資源檔複製到輸出目錄,因為該資源已併入編譯的應用程式中。您也可以使用「內容」建置動作,但您必須接著將檔案複製到輸出目錄中,也要將相同路徑關聯性 (Relationship) 中的資源檔部署至可執行檔。

注意事項:

請勿使用「內嵌資源」建置動作。建置動作本身支援 WPF 應用程式,但 Source 的解析無法合併 ResourceManager,因此無法分隔資料流中的個別資源。您仍可使用「內嵌資源」進行其他作業,前提是您必須同時使用 ResourceManager 來存取資源。

有一個相關技術是使用 XAML 檔案的 Pack URI,並將其參照為「來源」。Pack URI 可以讓使用者參考已參考之組件的元件,以及參考其他技術。如需 Pack URI 的詳細資訊,請參閱 Windows Presentation Foundation 應用程式資源、內容及資料檔案

對於未編譯為專案部分的資源,則會在執行階段評估 URI。您可以使用一般 URI 傳輸 (例如 file: 或 http:) 來參考資源檔。使用非編譯資源方法的缺點是,執行 file: 存取時需進行其他部署步驟,而執行 http: 存取時則需具備網際網路安全性區域。

重複使用合併的字典

您可以在應用程式之間重複使用或共用合併的資源字典,因為要合併的資源字典可透過任何有效的統一資源識別元 (URI) 加以參考。執行此作業的確切方法取決於您的應用程式部署策略,以及您所使用的應用程式模型。前述 Pack URI 策略可讓您在開發期間藉由共用組件參考,將合併的資源做為多個專案的來源。在此情況下,資源仍由用戶端散發,且至少必須有一個應用程式部署參考的組件。您也可以透過採用 http 通訊協定散發的 URI 來參考合併的資源。

將合併的字典撰寫為本機應用程式檔案,或寫入至本機共用儲存區,是另一種可行的合併字典 / 應用程式部署案例。

當地語系化

若需要當地語系化的資源被隔離至某個要合併到主要字典的字典上,並維持為鬆散 XAML,則這些檔案將可個別進行當地語系化。這項技術是當地語系化附屬資源組件的輕量形式。如需詳細資訊,請參閱 WPF 全球化和當地語系化概觀

請參閱

概念

資源概觀

資源和程式碼

Windows Presentation Foundation 應用程式資源、內容及資料檔案

參考

ResourceDictionary