次の方法で共有


x:Key ディレクティブ

XAML で定義されたディクショナリで作成および参照される要素を一意に識別します。 XAML オブジェクト要素に x:Key 値を追加することは、WPF ResourceDictionaryなど、リソース ディクショナリ内のリソースを識別する最も一般的な方法です。

XAML 属性の使用法

<object x:Key="stringKeyValue".../>  
-or-  
<object x:Key="{markupExtensionUsage}".../>  

XAML 属性の使用法 (WPF 固有)

<object.Resources>  
  <object x:Key="stringKeyValue".../>  
</object.Resources>  
-or-  
<object.Resources>  
  <object x:Key="{markupExtensionUsage}".../>  
</object.Resources>  

XAML 値

価値 形容
stringKeyValue キーとして使用するテキスト文字列。 テキスト文字列は、XamlName 文法に準拠している必要があります。
markupExtensionUsage マークアップ拡張区切り記号 {}内で、キーとして使用するオブジェクトを提供するマークアップ拡張機能の使用法。 「解説」を参照してください。

備考

x:Key では、XAML リソース ディクショナリの概念がサポートされています。 言語としての XAML では、リソース ディクショナリの実装は定義されません。これは、特定の UI フレームワークに任されています。 WPF で XAML リソース ディクショナリを実装する方法の詳細については、「XAML リソースの概要 (WPF .NET)」を参照してください。

XAML 2006 および WPF では、x:Key を属性として指定する必要があります。 文字列以外のキーは引き続き使用できますが、属性形式で非文字列値を指定するにはマークアップ拡張を使用する必要があります。 XAML 2009 を使用している場合は、x:Key を要素として指定して、マークアップ拡張の中間を必要とせずに、文字列以外のオブジェクト型によってキー指定されたディクショナリを明示的にサポートできます。 このトピックの「XAML 2009」セクションを参照してください。 「解説」セクションの残りの部分は、XAML 2006 実装に特に適用されます。

x:Key の属性値には、XamlName Grammar で定義されている任意の文字列を指定することも、マークアップ拡張を使用して評価されるオブジェクトを指定することもできます。 WPF の例については、「WPF の使用に関するメモ」を参照してください。

IDictionary 実装である親要素の子要素には、通常、そのディクショナリ内の一意のキー値を指定する x:Key 属性を含める必要があります。 フレームワークでは、エイリアス化されたキー プロパティを実装して、特定の型の x:Key に置き換える場合があります。このようなプロパティを定義する型は、DictionaryKeyPropertyAttributeで属性付けする必要があります。

x:Key の指定と同等のコードは、基になる IDictionaryに使用されるキーです。 たとえば、WPF のリソースのマークアップに適用される x:Key は、コード内の WPF ResourceDictionary にリソースを追加するときに、ResourceDictionary.Addkey パラメーターの値と同じです。

WPF の使用に関する注意事項

WPF ResourceDictionaryなど、IDictionary 実装である親オブジェクトの子オブジェクトには通常、x:Key 属性を含める必要があり、キー値はそのディクショナリ内で一意である必要があります。 注目すべき 2 つの例外があります。

  • 一部の WPF 型では、ディクショナリを使用するための暗黙的なキーが宣言されています。 たとえば、TargetTypeを持つ Style、または DataTypeを持つ DataTemplate は、ResourceDictionary 内に存在し、暗黙的なキーを使用できます。

  • WPF では、マージされたリソース ディクショナリの概念がサポートされています。 結合されたディクショナリ間でキーを共有でき、共有キーの動作には FindResourceを使用してアクセスできます。 詳細については、「マージされたリソース ディクショナリ を参照してください。

WPF XAML の実装とアプリケーション モデル全体では、XAML マークアップ コンパイラによってキーの一意性がチェックされません。 代わりに、x:Key 値が見つからないか一般的でないと、読み込み時の XAML パーサー エラーが発生します。 ただし、WPF のディクショナリを Visual Studio で処理すると、多くの場合、設計フェーズでこのようなエラーが発生する可能性があります。

次に示す構文では、ResourceDictionary オブジェクトは、WPF XAML プロセッサがコレクションを生成して Resources コレクションを設定する方法に暗黙的であることに注意してください。 ResourceDictionary は、通常、マークアップ内の要素として明示的に提供されませんが、わかりやすくするために必要な場合もあります (Resources プロパティ要素とディクショナリを設定するアイテムの間のコレクション オブジェクト要素になります)。 コレクション オブジェクトがマークアップの暗黙的な要素である理由については、「XAML 構文の詳細 を参照してください。

WPF XAML 実装では、リソース ディクショナリ キーの処理は、ResourceKey 抽象クラスによって定義されます。 ただし、WPF XAML プロセッサでは、キーの使用法に基づいて、基になるさまざまな拡張機能の種類が生成されます。 たとえば、DataTemplate または派生クラスのキーは個別に処理され、個別の DataTemplateKey オブジェクトが生成されます。

キーと名前は、基本的な XAML 定義で異なるディレクティブと言語要素 (x:Keyx:Name) を使用します。 キーと名前は、WPF 定義とこれらの概念のアプリケーションによって、さまざまな状況でも使用されます。 詳細については、「WPF XAML 名前スコープ 」を参照してください。

前に説明したように、キーの値はマークアップ拡張を介して指定でき、文字列値以外の値を指定できます。 WPF シナリオの例として、x:Key の値が ComponentResourceKeyである可能性があります。 特定のコントロールは、スタイルを完全に置き換えることなく、そのコントロールの外観と動作の一部に影響を与えるカスタム スタイル リソースに対して、その種類のスタイル キーを公開します。 このようなキーの例として、ButtonStyleKeyがあります。

WPF マージディクショナリ機能では、キーの一意性とキー参照の動作に関する追加の考慮事項が導入されています。 詳細については、「マージされたリソース ディクショナリ を参照してください。

XAML 2009

XAML 2009 では、x:Key 常に属性形式で提供される制限が緩和されます。

WPF では、XAML 2009 機能を使用できますが、マークアップ コンパイルされていない XAML に対してのみ使用できます。 WPF 用のマークアップ コンパイル XAML と XAML の BAML 形式は、現在、XAML 2009 のキーワードと機能をサポートしていません。

XAML 2009 では、次の使用法で x:Key 要素を指定できます。

XAML 要素の使用法 (XAML 2009 のみ)

<object>  
  <x:Key>  
keyObject  
  </x:Key>  
...  
</object>  

XAML 値

価値 形容
keyObject 特殊化されたディクショナリ内の特定の object のキーとして使用されるオブジェクトのオブジェクト要素。
  • この種の使用のコンテナー/親は、ここには表示されません。 object は、特殊なディクショナリ実装を表すオブジェクト要素の子であることが期待されます。 keyObject は、その特定の特殊なディクショナリ実装のキーとして適切なオブジェクト インスタンス (または値型の値) であることが期待されます。

  • WPF では、この使用を必要とするディクショナリは実装されません。 オブジェクト キーは XAML 言語の一般的な機能であり、XAML でディクショナリを作成することが望ましい特定のユーザー辞書シナリオに役立つ場合があります。 リソースに文字列以外のキーを使用する暗黙的なスタイルなどの WPF 機能では、キーを確立または指定するための他の手法が存在するため、オブジェクト キーを使用する必要はありません。

  • keyObject は、直接オブジェクト インスタンスではなく、オブジェクト要素の形式でのマークアップ拡張の使用である場合もあります。

Silverlight の使用に関する注意事項

Silverlight の x:Key については、別途記載されています。 詳細については、「XAML 名前空間 (x:) 言語機能 (Silverlight)を参照してください。

関連項目