ComponentResourceKey 標記延伸

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

XAML 屬性使用方式 (設定機碼、compact)

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

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

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

XAML 屬性使用方式 (要求資源、compact)

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

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

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

XAML 值

targetTypeName 在資源元件中定義的公用 common language runtime (CLR) 類型的名稱。
targetID 資源的索引鍵。 當查閱資源時, targetID 會類似于資源的 x:Key 指示詞。

備註

如上述用法所示, ComponentResourceKey 在兩個位置中可以找到 {} 標記延伸使用方式:

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

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

若要參考來自主題的元件資源,通常建議您使用, {DynamicResource} 而不是 {StaticResource} 。 這會顯示在使用方式中。 {DynamicResource} 建議您這樣做,因為使用者可以變更主題本身。 如果您想要讓元件資源最符合控制項作者的意圖以支援主題,您也應該讓您的元件資源參考也是動態的。

TypeInTargetAssembly會識別存在於實際定義資源之目標群組件中的類型。 ComponentResourceKey可以獨立地定義和使用,而不需要明確地知道定義的位置 TypeInTargetAssembly ,但是最後必須透過參考的元件來解析型別。

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

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

所顯示的 compact 語法會依賴標記延伸的函式簽章 ComponentResourceKey 和位置參數使用方式。 targetTypeName和的 targetID 指定順序很重要。 詳細資訊語法依賴無參數的函式 ComponentResourceKey ,然後 TypeInTargetAssembly ResourceId 以類似物件元素上 true 屬性語法的方式設定和。 在詳細資訊語法中,屬性的設定順序並不重要。 這兩個替代方案的關聯性和機制 (compact 和 verbose) 在主題 標記延伸和 WPF XAML中有更詳細的說明。

技術上來說,的值 targetID 可以是任何物件,它不一定是字串。 不過,WPF 中最常見的用法是將 targetID 值與字串的表單對齊,而在 XamlName 文法中,這類字串是有效的。

ComponentResourceKey 可以用在物件元素語法中。 在此情況下,必須同時指定和屬性的值, TypeInTargetAssembly ResourceId 才能正確地初始化延伸模組。

在 WPF XAML 讀取器的執行中,這個標記延伸的處理是由類別所定義 ComponentResourceKey

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

另請參閱