2010-12-13 6 views
45

x:Keyx:Nameの違いは何ですか?x:Keyとx:WPFの名前の違いは何ですか?

本当の違いは何か分かりません。

+1

@Alastair、可能性のある詐欺として記載されている質問は、これとは関係ありません。 – Josh

+1

どのように重複していますか?もう1つの質問は 'Name'と' Type'について話します。この質問は 'Key'と' Name'についてです。 – jalf

+0

私の間違い、私は "可能性のある詐欺"の質問を誤解しました。謝罪。 –

答えて

43

類似の目的で使用されていますが、互換性はありません。 x:キーは辞書に値として追加される項目に使用されます。ほとんどの場合、スタイルやResourceDictionaryに追加される他のリソースのために使用されます。 x:Key属性を設定すると、オブジェクトには対応するプロパティが実際には存在せず、付属の依存プロパティも設定されます。これは、XAMLプロセッサがDictionary.Addを呼び出すときに使用するキーを知るために使用されます。

x:名前は少し複雑です。親要素のスコープ内のオブジェクト(通常はFrameworkElementから派生したオブジェクト)に関連する名前を適用するために使用されます。このスコープは "ネームスコープ"と呼ばれ、それを考える最も簡単な方法は、<TextBox x:Name="foo" />を含むUserControlを想像することです。

各UserControlに固有のネームスコープがあるため、「foo」という名前を付けずに、UserControlの複数のインスタンスをウィンドウに配置できます。

FrameworkElementは、x:Nameの設定と同じ名前の依存関係プロパティを定義しています。

もう1つの違いは、XAMLデザイナーがx:Nameを持つ要素のコードビハインドにメンバーを作成する点です。これは、x:Keyを使用して辞書に追加されたオブジェクトには当てはまりません。

詳細については、the x:Name directiveのMSDNドキュメントの備考セクションを参照してください。

20

x:KeyはResourceDictionary要素の有効範囲内でのみ有効です。 x:Keyは、ResourceDictionary内の要素の主識別子として使用されます。

一方、x:NameはResourceDictionary以外のすべてのスコープで有効です。 x:KeyはResourceDictionaryスコープ外では無効です。