ComponentResourceKey マークアップ拡張機能
更新 : 2007 年 11 月
外部アセンブリから読み込まれるリソースのキーを定義および参照します。これにより、アセンブリ内で明示的にリソース ディクショナリを指定する代わりに、リソース ルックアップによってアセンブリ内の対象の型を指定することが可能になります。
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 属性と類似しています。 |
解説
TypeInTargetAssembly は、そのリソースが実際に定義されている対象アセンブリに存在している型を識別します。ComponentResourceKey は、TypeInTargetAssembly がどこで定義されているかが正確にわかっていない場合でも定義して使用できますが、最終的には、参照されているアセンブリによって型を解決する必要があります。
ComponentResourceKey の一般的な使用方法は、後にクラスのメンバとして公開するキーを定義することです。この方法で使用する場合は、マークアップ拡張機能ではなく、ComponentResourceKey クラス コンストラクタを使用します。
属性構文は、ComponentResourceKey マークアップ拡張機能で一般的に使用されています。前に示したコンパクトな構文は、ComponentResourceKey.ComponentResourceKey コンストラクタ シグネチャに依存しており、targetTypeName と targetID を設定する順序が重要です。詳細な構文は、既定のコンストラクタである ComponentResourceKey.ComponentResourceKey に依存し、オブジェクト要素の実際の属性構文と同様の方法で TypeInTargetAssembly と ResourceId を設定します。詳細な構文では、各プロパティを設定する順序は重要ではありません。これら 2 つの方法 (コンパクトと詳細) の関係および機構の詳細については、「マークアップ拡張機能と XAML」を参照してください。
ComponentResourceKey は、オブジェクト要素構文で使用できます。この場合、拡張機能を正しく初期化するには、TypeInTargetAssembly プロパティと ResourceId プロパティの両方の値を指定する必要があります。
WPF XAML リーダー実装では、このマークアップ拡張機能の処理は、ComponentResourceKey クラスによって定義されます。
ComponentResourceKey はマークアップ拡張機能です。一般にマークアップ拡張機能を実装するのは、属性値をリテラル値やハンドラ名以外にエスケープする要件が存在し、その要件の適用範囲がグローバルで、特定の型やプロパティに型コンバータを適用するだけにとどまない場合です。XAML のすべてのマークアップ拡張機能では、それぞれの属性構文で { と } の 2 つの記号を使用します。これは規約であり、これに従って XAML プロセッサは、マークアップ拡張機能で属性を処理する必要があることを認識します。詳細については、「マークアップ拡張機能と XAML」を参照してください。