合併的資源字典 (WPF .NET)

Windows Presentation Foundation (WPF) 資源支援合併的資源字典功能。 這項功能提供一種方式,在編譯的 XAML 應用程式之外定義 WPF 應用程式的資源部分。 然後,資源可在應用程式間共用,也更方便隔離進行當地語系化。

重要

.NET 7 和 .NET 6 的桌面指南檔正在建置中。

建立合併字典

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

<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 ,然後將傳回值 ResourceDictionary 轉換成 。

合併字典 URI

有數種技術可用來包含合併的資源字典,其以您使用的統一資源識別項 (URI) 格式表示。 大致來說,這些技術可以分成兩個類別:編譯為專案的一部分的資源,以及未編譯為專案的一部分的資源。

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

注意

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

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

對於未編譯為專案一部分的資源,會在執行時間評估 URI。 您可以使用常見的 URI 傳輸,例如 檔案: HTTP: 來參考資源檔。 使用非編譯資源方法的缺點是檔案 存取需要額外的部署步驟,HTTP 存取意指網際網路安全性區域。

重複使用合併字典

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

將合併字典寫入為本機應用程式檔或本機共用儲存體,是另一個可能的合併字典和應用程式部署案例。

當地語系化

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

另請參閱