次の方法で共有


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 値

価値 説明
targetTypeName リソース アセンブリで定義されているパブリック共通言語ランタイム (CLR) 型の名前。
targetID リソースのキー。 リソースが検索されると、 targetID はリソースの x:Key ディレクティブ に似ています。

注釈

上記の使用法で見られるように、{ComponentResourceKey} マークアップ拡張の使用法は 2 つの場所にあります。

  • コントロール作成者が提供するテーマ リソース ディクショナリ内のキーの定義。

  • コントロールを再テンプレートする際に、そのコントロールのテーマが提供するリソースからのプロパティ値を使用したい場合、アセンブリからテーマリソースにアクセスします。

テーマから取得したコンポーネント リソースを参照する場合は、通常、{DynamicResource}ではなく{StaticResource}を使用することをお勧めします。 これは使用法に示されています。 {DynamicResource} は、ユーザーがテーマ自体を変更できるため、推奨されます。 テーマをサポートするためのコントロール作成者の意図に最も近いコンポーネント リソースが必要な場合は、コンポーネント リソース参照も動的にする必要があります。

TypeInTargetAssemblyは、リソースが実際に定義されているターゲット アセンブリに存在する型を識別します。 ComponentResourceKeyは、TypeInTargetAssemblyが定義されている場所を正確に把握することとは無関係に定義および使用できますが、最終的には参照されるアセンブリを介して型を解決する必要があります。

ComponentResourceKeyの一般的な使用方法は、クラスのメンバーとして公開されるキーを定義することです。 この使用法では、マークアップ拡張ではなく、 ComponentResourceKey クラス コンストラクターを使用します。 詳細については、「コントロール作成の概要」トピックの「 ComponentResourceKey」または「テーマ リソースのキーの定義と参照」セクション 参照してください。

キーの確立とキー付きリソースの参照の両方で、属性構文は一般的に ComponentResourceKey マークアップ拡張に使用されます。

次に示すコンパクトな構文は、マークアップ拡張の ComponentResourceKey コンストラクターシグネチャと位置指定パラメーターの使用に依存しています。 targetTypeNametargetIDの順序は重要です。 詳細構文は、 ComponentResourceKey パラメーターなしのコンストラクターに依存し、オブジェクト要素の真の属性構文に似た方法で TypeInTargetAssemblyResourceId を設定します。 詳細構文では、プロパティが設定される順序は重要ではありません。 これら 2 つの代替手段 (コンパクトと詳細) の関係とメカニズムについては、「 マークアップ拡張機能と WPF XAML」のトピックで詳しく説明します。

技術的には、 targetID の値は任意のオブジェクトにすることができます。文字列である必要はありません。 ただし、WPF で最も一般的な使用方法は、 targetID 値を文字列であるフォームに合わせ、そのような文字列が XamlName 文法で有効な場所に配置することです。

ComponentResourceKey は、オブジェクト要素の構文で使用できます。 この場合、拡張機能を適切に初期化するには、 TypeInTargetAssembly プロパティと ResourceId プロパティの両方の値を指定する必要があります。

WPF XAML リーダーの実装では、このマークアップ拡張機能の処理は、 ComponentResourceKey クラスによって定義されます。

ComponentResourceKey はマークアップ拡張機能です。 マークアップ拡張は通常、リテラル値またはハンドラー名以外の属性値をエスケープする必要があり、特定の型またはプロパティに型コンバーターを配置するよりもグローバルな要件である場合に実装されます。 XAML のすべてのマークアップ拡張では、{および } 文字が属性構文で使用されます。これは、マークアップ拡張が属性を処理する必要があることを XAML プロセッサが認識する規則です。 詳細については、「マークアップ拡張機能 WPF XAML」を参照してください。

こちらも参照ください