次の方法で共有


x:Name 属性

分離コードや一般的なコードから、インスタンス化されたオブジェクトにアクセスするためのオブジェクト要素をユニークに識別します。 バッキング プログラミング モデルに適用すると、 x:Name は、コンストラクターによって返されるオブジェクト参照を保持する変数と同等と見なすことができます。

XAML 属性の使用方法

<object x:Name="XAMLNameValue".../>

XAML 値

任期 Description
XAMLNameValue XamlName 文法の制限に準拠する文字列。

XamlName 文法

この XAML 実装でキーとして使用される文字列の規範的な文法を次に示します。

XamlName ::= NameStartChar (NameChar)*
NameStartChar ::= LetterCharacter | '_'
NameChar ::= NameStartChar | DecimalDigit
LetterCharacter ::= ('a'-'z') | ('A'-'Z')
DecimalDigit ::= '0'-'9'
CombiningCharacter::= none
  • 文字は下位の ASCII 範囲に制限され、より具体的にはローマ文字の大文字と小文字、数字、アンダースコア (_) 文字に制限されます。
  • Unicode 文字範囲はサポートされていません。
  • 名前を数字で始めることはできません。 一部のツール実装では、ユーザーが最初の文字として数字を指定した場合、または数字を含む他の値に基づいて x:Name 値が自動生成される場合は、文字列の前にアンダースコア (_) が付加されます。

注釈

指定した x:Name は、XAML の処理時に基になるコードで作成されるフィールドの名前になり、そのフィールドはオブジェクトへの参照を保持します。 このフィールドを作成するプロセスは、MSBuild ターゲット ステップによって実行されます。これは、XAML ファイルとその分離コードの部分クラスを結合する役割も担います。 この動作は必ずしも XAML 言語で指定されているわけではありません。これは、XAML 用のユニバーサル Windows プラットフォーム (UWP) プログラミングが、そのプログラミング モデルとアプリケーション モデルで x:Name を使用するために適用される特定の実装です。

定義された 各 x:Name は、XAML 名前スコープ内で一意である必要があります。 一般に、XAML 名前スコープは読み込まれたページのルート要素レベルで定義され、その要素の下にあるすべての要素が 1 つの XAML ページに含まれます。 追加の XAML 名前スコープは、そのページで定義されているコントロール テンプレートまたはデータ テンプレートによって定義されます。 実行時には、適用されたコントロール テンプレートから作成されたオブジェクト ツリーのルートに対して、また XamlReader.Load の呼び出しから作成されたオブジェクト ツリーに対して別の XAML 名前スコープが作成されます。 詳細については、 XAML 名前スコープに関するページを参照してください。

デザイン ツールは、多くの場合、要素がデザイン サーフェイスに導入されたときに x:Name 値を自動生成します。 自動生成スキームは、使用しているデザイナーによって異なりますが、一般的なスキームは、要素をバックするクラス名で始まり、その後に進む整数で始まる文字列を生成することです。 たとえば、デザイナーに最初の Button 要素を導入すると、XAML では、この要素の x:Name 属性値が "Button1" であることがわかります。

x:Name は、XAML プロパティ要素の構文または SetValue を使用したコードでは設定できません。 x:Name は、要素の XAML 属性構文を使用してのみ設定できます。

特に C++/CX アプリの場合、XAML ファイルまたはページのルート要素に対して x:Name 参照のバッキング フィールドは作成されません。 C++ コード ビハインドからルート オブジェクトを参照する必要がある場合は、他の API またはツリー トラバーサルを使用します。 たとえば、既知の名前付き子要素に対して FindName を呼び出し、 Parent を呼び出すことができます。

x:Name プロパティとその他の Name プロパティ

XAML で使用される型の中には 、Name という名前のプロパティもあります。 たとえば、 FrameworkElement.NameTextElement.Name

Name が要素の設定可能なプロパティとして使用できる場合、Name および x:Name は XAML で置き換えて使用できますが、同じ要素に両方の属性が指定されるとエラーが発生します。 Name プロパティはありますが、読み取り専用の場合もあります (VisualState.Name など)。 その場合は、常に x:Name を 使用して XAML でその要素に名前を付け、一般的でないコード シナリオでは読み取り専用 の名前 が存在します。

注意: FrameworkElement.Name は通常、x:Name で設定された値を変更する方法として使用するべきではありません。ただし、その一般的なルールに対する例外となるシナリオがいくつかあります。 一般的なシナリオでは、XAML 名前スコープの作成と定義は XAML プロセッサ操作です。 実行時 に FrameworkElement.Name を変更すると、XAML 名前スコープ/プライベート フィールドの名前付けのアラインメントが不整合になる可能性があり、コードビハインドで追跡するのは困難です。

x:Name と x:Key

x:NameResourceDictionary 内の要素に属性として適用して、 x:Key 属性の代わりに機能させることができます。 ( ResourceDictionary 内のすべての要素に x:Key 属性または x:Name 属性が必要というルールです)。これは、 ストーリーボードに設定されたアニメーションの場合に一般的です。 詳細については、 ResourceDictionary および XAML リソース参照のセクションを参照してください。