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 建構函式簽章和位置參數使用方式。 提供 targetTypeName
和 targetID
的順序很重要。 詳細資訊語法依賴 ComponentResourceKey 無參數建構函式,然後以類似對象元素上 true 屬性語法的方式來設定 TypeInTargetAssembly 和 ResourceId。 在詳細資訊語法中,設定屬性的順序並不重要。 這兩個替代項目 (精簡和詳細資訊) 的關聯性和機制在 標記延伸模組和 WPF XAML 主題中會有更詳細的說明。
就技術上而言,targetID
的值可以是任何物件,不一定是字串。 不過,WPF 中最常見的使用方式是將 targetID
值與字串的窗口對齊,以及這類字串在 XamlName 文法中有效的位置。
ComponentResourceKey
可能也會用於物件元素語法中。 在此情況下,需要指定 TypeInTargetAssembly 和 ResourceId 屬性的值,才能正確初始化延伸項目。
在 WPF XAML 讀取程式實作中,這個標記延伸的處理是由 ComponentResourceKey 類別所定義。
ComponentResourceKey
是一種標記延伸。 如果必須將屬性 (Attribute) 值加上逸出符號,以免成為常值或處理常式名稱,而且這個動作必須更全面地實施 (而不是只對特定類型或屬性 (Property) 設定類型轉換子 (Type Converter)),則通常會實作標記延伸。 所有 XAML 標記延伸都會在其屬性語法中使用 { 與 } 字元,這個慣例讓 XAML 處理器知道某個標記延伸必須處理這個屬性。 如需詳細資訊,請參閱標記延伸和 WPF XAML。