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 |
資源元件中定義的公用 Common Language Runtime (CLR) 類型名稱。 |
targetID |
資源的索引鍵。 查詢資源時, targetID 會類似于 資源的 x:Key 指示詞 。 |
備註
如上述用法所示,{ ComponentResourceKey
} 標記延伸使用方式位於兩個位置:
主題資源字典內索引鍵的定義,如控制項作者所提供。
從元件存取主題資源時,當您重新範本化控制項,但想要使用來自控制項主題所提供資源的屬性值。
若要參考來自主題的元件資源,通常建議您使用 {DynamicResource}
而不是 {StaticResource}
。 這會顯示在使用量中。 {DynamicResource}
建議使用 ,因為使用者可以變更主題本身。 如果您想要最符合控制項作者支援主題之意圖的元件資源,則也應該讓元件資源參考成為動態。
會 TypeInTargetAssembly 識別存在於實際定義資源之目標群組件中的型別。 ComponentResourceKey
可以單獨定義及使用 ,而不需確切地知道 定義 的位置 TypeInTargetAssembly ,但最終必須透過參考的元件解析型別。
的常見用法 ComponentResourceKey 是定義索引鍵,然後公開為類別的成員。 針對此用法,您會使用類別建 ComponentResourceKey 構函式,而不是標記延伸。 如需詳細資訊,請參閱 ComponentResourceKey 控制項撰寫概觀 主題 的一節。
針對建立索引鍵和參考索引鍵資源,屬性語法通常用於 ComponentResourceKey
標記延伸。
顯示的精簡語法依賴 ComponentResourceKey 標記延伸的建構函式簽章和位置參數使用方式。 和 targetID
的指定順序 targetTypeName
很重要。 詳細資訊語法依賴無參數建 ComponentResourceKey 構函式,然後以類似物件元素上 true 屬性語法的方式設定 TypeInTargetAssembly 和 ResourceId 。 在詳細資訊語法中,設定屬性的順序並不重要。 這兩個替代方案的關聯性和機制在標記延伸和 WPF XAML 主題 中會更詳細地說明。
就技術上而言,的值 targetID
可以是任何物件,它不一定是字串。 不過,WPF 中最常見的用法是將值與字串的表單對齊 targetID
,以及這類字串在 XamlName 文法 中 有效的位置。
ComponentResourceKey
可用於物件專案語法。 在此情況下,需要指定 和 ResourceId 屬性的值 TypeInTargetAssembly ,才能正確初始化延伸模組。
在 WPF XAML 讀取器實作中,這個標記延伸的處理是由 ComponentResourceKey 類別所定義。
ComponentResourceKey
是一種標記延伸。 如果必須將屬性 (Attribute) 值加上逸出符號,以免成為常值或處理常式名稱,而且這個動作必須更全面地實施 (而不是只對特定類型或屬性 (Property) 設定類型轉換子 (Type Converter)),則通常會實作標記延伸。 XAML 中的所有標記延伸都會在其屬性語法中使用 { 和 } 字元,這是 XAML 處理器辨識標記延伸必須處理屬性的慣例。 如需詳細資訊,請參閱標記延伸和 WPF XAML。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應