共用方式為


ComponentResourceKey 標記延伸

定義和參考從外部組件載入之資源的索引鍵。 這可讓資源查閱在組件中指定目標類型,而非組件或類別中的明確資源字典。

XAML 屬性使用方式 (設定索引鍵,精簡)

<object x:Key="{ComponentResourceKey {x:Type targetTypeName}, targetID}" ... />  

XAML 屬性使用方式 (設定索引鍵,詳細資訊)

<object x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type targetTypeName}, ResourceID=targetID}" ... />  

XAML 屬性使用方式 (要求資源,精簡)

<object property="{DynamicResource {ComponentResourceKey {x:Type targetTypeName}, targetID}}" ... />  

XAML 屬性使用方式 (要求資源,詳細資訊)

<object property="{DynamicResource {ComponentResourceKey TypeInTargetAssembly={x:Type targetTypeName}, ResourceID=targetID}}" ... />  

XAML 值

Description
targetTypeName 資源組件中定義的公用通用語言執行平台 (CLR) 類型名稱。
targetID 資源的金鑰。 查閱資源時,targetID 類似於資源的 x:Key 指示詞

備註

如上述使用方式所示,{ComponentResourceKey} 標記延伸使用方式有兩個位置:

  • 主題資源字典內索引鍵的定義,如控制項作者所提供。

  • 從組件存取主題資源時,當您重新範本化控制項,但想要使用來自控制項主題所提供資源的屬性值。

若要參考來自主題的元件資源,通常建議您使用 {DynamicResource} 而非 {StaticResource}。 如同使用方式所示。 建議使用 {DynamicResource} 是因為主題本身可由使用者變更。 若您想要讓元件資源最符合控制項作者支援主題之意圖,則也應該將元件資源參考設為動態。

TypeInTargetAssembly 會識別實際定義資源的目標組件中存在的類型。 ComponentResourceKey 可以單獨定義及使用,而不需確切知道定義 TypeInTargetAssembly 的位置,但最終仍必須透過參考的組件解析類型。

ComponentResourceKey 的常見用法是定義索引鍵,然後公開為類別的成員。 針對此用法,您會使用 ComponentResourceKey 類別建構函式,而不是標記延伸。 如需詳細資訊,請參閱 ComponentResourceKey,或主題 控制項撰寫概觀主題的「定義和參考佈景主題資源的索引鍵」一節。

針對建立索引鍵和參考索引鍵資源,屬性語法通常用於 ComponentResourceKey 標記延伸。

顯示的精簡語法依賴標記延伸的 ComponentResourceKey 建構函式簽章和位置參數使用方式。 提供 targetTypeNametargetID 的順序很重要。 詳細資訊語法依賴 ComponentResourceKey 無參數建構函式,然後以類似對象元素上 true 屬性語法的方式來設定 TypeInTargetAssemblyResourceId。 在詳細資訊語法中,設定屬性的順序並不重要。 這兩個替代項目 (精簡和詳細資訊) 的關聯性和機制在 標記延伸模組和 WPF XAML 主題中會有更詳細的說明。

就技術上而言,targetID 的值可以是任何物件,不一定是字串。 不過,WPF 中最常見的使用方式是將 targetID 值與字串的窗口對齊,以及這類字串在 XamlName 文法中有效的位置。

ComponentResourceKey 可能也會用於物件元素語法中。 在此情況下,需要指定 TypeInTargetAssemblyResourceId 屬性的值,才能正確初始化延伸項目。

在 WPF XAML 讀取程式實作中,這個標記延伸的處理是由 ComponentResourceKey 類別所定義。

ComponentResourceKey 是一種標記延伸。 如果必須將屬性 (Attribute) 值加上逸出符號,以免成為常值或處理常式名稱,而且這個動作必須更全面地實施 (而不是只對特定類型或屬性 (Property) 設定類型轉換子 (Type Converter)),則通常會實作標記延伸。 所有 XAML 標記延伸都會在其屬性語法中使用 { 與 } 字元,這個慣例讓 XAML 處理器知道某個標記延伸必須處理這個屬性。 如需詳細資訊,請參閱標記延伸和 WPF XAML

另請參閱