定義和參考從外部組件載入之資源的索引鍵。 這可讓資源查閱在組件中指定目標類型,而非組件或類別中的明確資源字典。
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 值
價值觀 | 說明 |
---|---|
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 文法中有效的位置。
DynamicResource
可能也會用於物件元素語法中。 在此情況下,需要指定 TypeInTargetAssembly 和 ResourceId 屬性的值,才能正確初始化延伸項目。
在 WPF XAML 讀取程式實作中,這個標記延伸的處理是由 ComponentResourceKey 類別所定義。
ComponentResourceKey
是標記延伸。 當需要轉義屬性值,使其不同於字面值或處理程式名稱時,通常會實作標記擴展。此需求比僅僅在特定類型或屬性上使用型別轉換器更加全域化。 所有 XAML 標記延伸都會在其屬性語法中使用 { 與 } 字元,這個慣例讓 XAML 處理器知道某個標記延伸必須處理這個屬性。 如需詳細資訊,請參閱標記延伸和 WPF XAML。