Share via


合併的資源字典

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 指示詞 。 一般而言,集合內的 MergedDictionariesResourceDictionary 一個 Source 都會指定屬性。 的值 Source 應該是統一資源識別項 (URI),可解析為要合併之資源檔的位置。 該 URI 的目的地必須是另一個 XAML 檔案,並作為 ResourceDictionary 其根項目。

注意

定義 內指定為合併字典的資源 ResourceDictionary ,可以是指定 Source 的替代方式,或除了從指定來源包含的任何資源之外,也是合法的。 不過,這不是常見的案例。合併字典的主要案例是合併來自外部檔案位置的資源。 如果您想要在頁面的標記內指定資源,通常應該在 main ResourceDictionary 中定義這些資源,而不是在合併的字典中定義這些資源。

合併的字典行為

合併字典中的資源佔用資源查閱範圍中的位置,就在它們合併所在的主要資源字典範圍後面。 雖然資源索引鍵在任何個別的字典中必須是唯一的,但合併字典集合中可有多個索引鍵。 在此情況下,傳回的資源會來自集合中 MergedDictionaries 循序找到的最後一個字典。 MergedDictionaries如果集合是在 XAML 中定義,則集合中合併字典的順序是標記中提供的元素順序。 如果主要字典和合併的字典中都定義了索引鍵,則傳回的資源會來自主要字典。 這些範圍規則同樣適用於靜態資源參考和動態資源參考。

合併的字典和程式碼

合併的字典可以透過程式碼新增至 Resources 字典。 任何屬性的預設值一開始為空白 ResourceDictionaryResources ,也具有預設的空白 MergedDictionaries 集合屬性。 若要透過程式碼新增合併字典,您可以取得所需主要 ResourceDictionary 的參考、取得其 MergedDictionaries 屬性值,並在 中包含的 MergedDictionaries 泛型 Collection 上呼叫 Add 。 您加入的物件必須是新的 ResourceDictionary 。 在程式碼中,您不會設定 Source 屬性。 相反地,您必須藉由建立物件或載入物件來取得 ResourceDictionary 物件。 載入現有 ResourceDictionary 方法,以在具有 ResourceDictionary 根目錄的現有 XAML 檔案資料流程上呼叫 XamlReader.Load ,然後將傳 XamlReader.Load 回值 ResourceDictionary 轉換成 。

合併的資源字典 URI

有數種技術可用來包含合併的資源字典,這些字典會以您將使用的統一資源識別項 (URI) 格式表示。 廣泛而言,這些技巧可分為兩類︰編譯為專案一部分的資源,和不編譯為專案一部分的資源。

若為編譯為專案一部分的資源,您可以使用參照資源位置的相對路徑。 在編譯期間評估相對路徑。 您的資源必須定義為專案的一部分,作為資源建置動作。 如果您在專案中將資源 .xaml 檔案包含為資源,就不需要將資源檔複製到輸出目錄,該資源已包含在已編譯的應用程式中。 您也可以使用內容建置動作,但您必須接著將檔案複製到輸出目錄,也將資源檔部署在與可執行檔有關的同一路徑。

注意

請勿使用內嵌資源建置動作。 WPF 應用程式支援建置動作本身,但 的解析 Source 不會併入 ResourceManager ,因此無法將個別資源與資料流程分開。 只要您也用來存取資源,您仍然可以將內嵌資源用於 ResourceManager 其他用途。

相關的技術是使用 Pack URI 至 XAML 檔案,並將其稱為 Source。 Pack URI 可以參考參考組件的元件和其他技術。 如需 Pack URI 的詳細資訊,請參閱 WPF 應用程式資源、內容和資料檔案

若為不編譯為專案一部分的資源,則會在執行階段評估 URI。 您可以使用一般的 URI 傳輸,例如 file: 或 http:,參考資源檔。 使用未編譯資源方法的缺點是 file: 存取需要額外的部署步驟,以及 http: 存取表示網際網路安全性區域。

重複使用合併的字典

您可以重複使用或共用應用程式之間的合併資源字典,因為要合併的資源字典可以透過任何有效的統一資源識別項 (URI) 來參考。 至於確實該如何做,取決於您的應用程式部署策略以及您遵循的應用程式模型。 前述的 Pack URI 策略提供了一個常見的方法,在開發期間透過共用組件參考,在多個專案中取得合併的資源。 在此案例中,資源仍由用戶端散發,至少一個應用程式必須部署參考的組件。 也可以透過使用 http 通訊協定的分散式 URI 參考合併的資源。

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

當地語系化

如果需要當地語系化的資源會隔離至合併至主要字典的字典,並保留為鬆散的 XAML,則可以個別當地語系化這些檔案。 這項技術是當地語系化附屬資源組件的輕量型替代方案。 如需詳細資訊,請參閱 WPF 全球化和當地語系化概觀

另請參閱