共用方式為


合併的資源字典

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 的目的地必須是另一個 XAML 檔案, ResourceDictionary 做為其根元素。

注意

在指定為合併字典的 ResourceDictionary 內定義資源是合法的,或為指定 Source 的替代項目,或為指定來源包含的任何資源以外的項目。 不過,這不是常見的案例。合併字典的主要案例是合併來自外部檔案位置的資源。 如果您想要在頁面標記內指定資源,通常應該在主要的 ResourceDictionary 中定義它們,不是在合併的字典中定義。

合併的字典行為

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

合併的字典和程式碼

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

合併的資源字典 URI

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

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

注意

請勿使用內嵌資源建置動作。 WPF 應用程式支援建置動作本身,但 Source 的解析度不包含 ResourceManager,因此不能從資料流中分隔出個別的資源。 只要也使用 ResourceManager 存取資源,內嵌資源仍然可以用於其他用途。

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

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

重複使用合併的字典

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

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

當地語系化

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

另請參閱