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

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

重要

.NET 5 (和 .NET Core) 的桌面指南檔正在結構中。

建立合併的字典

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

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

ResourceDictionary元素沒有x:Key指示詞,通常是資源集合中所有專案的必要專案。 但集合中的另一個 ResourceDictionary 參考 MergedDictionaries 是特殊案例,保留給這個合併的資源字典案例。 此外, ResourceDictionary 引進合併資源字典的也不能有 x:Key指示詞。

一般而言, ResourceDictionary 集合內的每一個都會 MergedDictionaries 指定一個 Source 屬性。 的值 Source 應該是統一資源識別項, (URI) 解析為要合併之資源檔的位置。 該 URI 的目的地必須是另一個 XAML 檔案, ResourceDictionary 其為根項目。

注意

ResourceDictionary 必須在指定為合併字典的中定義資源,以做為指定的替代方案, Source 或是除了包含在指定來源中的任何資源。 不過,這不是常見的情況。 合併字典的主要案例是合併外部檔案位置的資源。 如果您想要在頁面的標記內指定資源,請在主中定義這些資源, ResourceDictionary 而不是在合併的字典中定義。

合併的字典行為

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

合併的字典和程式碼

合併的字典可以透過程式碼新增至 Resources 字典。 任何屬性的預設值一開始是空 ResourceDictionary 的, Resources 也會有預設的初始空白 MergedDictionaries 集合屬性。 若要透過程式碼加入合併的字典,您可以取得所需主要複本的參考 ResourceDictionary 、取得其 MergedDictionaries 屬性值,以及在 Add 所包含的泛型上呼叫 Collection MergedDictionaries 。 您加入的物件必須是新的 ResourceDictionary

在程式碼中,您不會設定 Source 屬性。 相反地,您必須藉 ResourceDictionary 由建立物件或載入物件來取得它。 載入現有 XAML 檔案資料流程( ResourceDictionary XamlReader.Load 具有 ResourceDictionary 根目錄),然後將傳回值轉換為的方法之一 ResourceDictionary

合併的字典 Uri

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

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

注意

請勿使用 內嵌的資源 建立動作。 WPF 應用程式支援 build 動作本身,但是的解決方式不 Source 會併入 ResourceManager ,因此無法將個別資源從資料流程中分離出來。 您仍然可以將 內嵌資源 用於其他用途,只要您也用 ResourceManager 來存取資源即可。

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

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

重複使用合併的字典

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

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

當地語系化

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

另請參閱