x:Name 属性x:Name attribute

コード ビハインドまたは一般的なコードからインスタンス化されたオブジェクトにアクセスするために、オブジェクト要素を一意に識別します。Uniquely identifies object elements for access to the instantiated object from code-behind or general code. 基になるプログラミング モデルに適用後の x:Name は、コンストラクターによって返されるオブジェクト参照を保持する変数と等価であると見なすことができます。Once applied to a backing programming model, x:Name can be considered equivalent to the variable holding an object reference, as returned by a constructor.

XAML 属性の使用方法XAML attribute usage

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

XAML 値XAML values

用語Term 説明Description
XAMLNameValueXAMLNameValue XamlName の文法の制限に準拠する文字列。A string that conforms to the restrictions of the XamlName grammar.

XamlName の文法XamlName grammar

XAML 実装でキーとして使われる文字列の規範となる文法を次に示します。The following is the normative grammar for a string that is used as a key in this XAML implementation:

XamlName ::= NameStartChar (NameChar)*
NameStartChar ::= LetterCharacter | '_'
NameChar ::= NameStartChar | DecimalDigit
LetterCharacter ::= ('a'-'z') | ('A'-'Z')
DecimalDigit ::= '0'-'9'
CombiningCharacter::= none
  • 文字が ASCII の下の範囲はローマ字の大文字と小文字の英字、数字、およびアンダー スコアを具体的には制限されている (_) 文字。Characters are restricted to the lower ASCII range, and more specifically to Roman alphabet uppercase and lowercase letters, digits, and the underscore (_) character.
  • Unicode 文字範囲はサポートされていません。The Unicode character range is not supported.
  • 名前の先頭を数字にすることはできません。A name cannot begin with a digit. いくつかのツールの実装の先頭にアンダー スコア (_)、ユーザーは最初の文字またはツールによってとして 1 桁の数字を指定する場合、文字列にX:name桁の数字が含まれているその他の値に基づいて値。Some tool implementations prepend an underscore (_) to a string if the user supplies a digit as the initial character, or the tool autogenerates x:Name values based on other values that contain digits.

注釈Remarks

指定した x:Name は、XAML が処理されるときに基になるコードで生成されるフィールドの名前となり、そのフィールドにオブジェクトへの参照が保持されます。The specified x:Name becomes the name of a field that is created in the underlying code when XAML is processed, and that field holds a reference to the object. このフィールドの作成は、MSBuild ターゲットの手順で実行されます。この手順で、XAML ファイルの部分クラスとそのコード ビハインドも加えられます。The process of creating this field is performed by the MSBuild target steps, which also are responsible for joining the partial classes for a XAML file and its code-behind. この動作は、必ずしも XAML 言語で指定されているわけではなく、XAML のユニバーサル Windows プラットフォーム (UWP) のプログラミング モデルやアプリケーション モデルで x:Name を使うために適用されている特別な実装です。This behavior is not necessarily XAML-language specified; it is the particular implementation that Universal Windows Platform (UWP) programming for XAML applies to use x:Name in its programming and application models.

定義されている各 x:Name は、XAML 名前スコープ内で一意である必要があります。Each defined x:Name must be unique within a XAML namescope. XAML 名前スコープは一般に、読み込まれたページのルート要素レベルで定義され、1 つの XAML ページ内のルート要素の下にすべての要素が含まれます。Generally, a XAML namescope is defined at the root element level of a loaded page and contains all elements under that element in a single XAML page. それ以外の XAML 名前スコープは、そのページで定義されているコントロール テンプレートやデータ テンプレートで定義されます。Additional XAML namescopes are defined by any control template or data template that is defined on that page. 実行時には、適用されたコントロール テンプレートから作成されるオブジェクト ツリーのルートにまた別の XAML 名前スコープが作成されます。この XAML 名前空間はほかにも、XamlReader.Load の呼び出しで作成されるオブジェクト ツリーによっても作成されます。At run time, another XAML namescope is created for the root of the object tree that is created from an applied control template, and also by object trees created from a call to XamlReader.Load. 詳しくは、「XAML 名前スコープ」をご覧ください。For more info, see XAML namescopes.

デザイン ツールでは、要素をデザイン サーフェイスに取り込むと要素の x:Name の値が自動生成されることがよくあります。Design tools often autogenerate x:Name values for elements when they are introduced to the design surface. 自動生成方式は使っているデザイナーによって異なりますが、一般的な方式では、要素をサポートするクラス名で始まり、その後に増加していく整数が続く文字列が生成されます。The autogeneration scheme varies depending on which designer you are using, but a typical scheme is to generate a string that starts with the class name that backs the element, followed by an advancing integer. たとえば、最初の Button 要素をデザイナーに取り込むと、XAML ではこの要素の x:Name 属性の値が Button1 になります。For example, if you introduce the first Button element to the designer, you might see that in the XAML this element has the x:Name attribute value of "Button1".

x:Name は、XAML プロパティ要素構文で設定することも、SetValue を使うコードで設定することもできません。x:Name cannot be set in XAML property element syntax, or in code using SetValue. x:Name は、要素の XAML 属性構文を使うことでのみ設定できます。x:Name can only be set using XAML attribute syntax on elements.

  専用の C +/cli/CX アプリのバッキング フィールドをX:name XAML ファイルまたはページのルート要素の参照は作成されません。Note  Specifically for C++/CX apps, a backing field for an x:Name reference is not created for the root element of a XAML file or page. C++ のコード ビハインドからルート オブジェクトを参照する必要がある場合は、他の API またはツリー走査を使ってください。If you need to reference the root object from C++ code-behind, use other APIs or tree traversal. たとえば、既知の名前付き子要素に対して FindName を呼び出した後、Parent を呼び出します。For example you can call FindName for a known named child element and then call Parent.

x:Name などの Name プロパティx:Name and other Name properties

UWP XAML で使われる一部の型にも、Name という名前のプロパティがあります。Some types used in UWP XAML also have a property named Name. FrameworkElement.NameTextElement.Name などです。For example, FrameworkElement.Name and TextElement.Name.

要素で設定可能なプロパティとして Name が使用できる場合、XAML では Namex:Name のどちらも使うことができますが、両方の属性を同じ要素で指定するとエラーが発生します。If Name is available as a settable property on an element, Name and x:Name can be used interchangeably in XAML, but an error results if both attributes are specified on the same element. また、Name プロパティがあるものの、読み取り専用であるという場合もあります (VisualState.Name など)。There are also cases where there's a Name property but it's read-only (like VisualState.Name). そのような場合には、XAML 内の要素に名前を付けるときには常に x:Name を使います。読み取り専用の Name は、それほど一般的ではないコードのシナリオのために存在します。If that's the case you always use x:Name to name that element in the XAML and the read-only Name exists for some less-common code scenario.

注:   FrameworkElement.Name は通常、x:Name で設定された値を変更するときには使いませんが、この原則の例外となるシナリオもあります。Note  FrameworkElement.Name generally should not be used as a way to change values originally set by x:Name, although there are some scenarios that are exceptions to that general rule. 一般的なシナリオでは、XAML 名前スコープの作成と定義は XAML プロセッサの操作です。In typical scenarios, the creation and definition of XAML namescopes is a XAML processor operation. FrameworkElement.Name を実行時に変更すると、XAML 名前スコープとプライベート フィールドの名前付けの調整の整合性が損なわれ、コード ビハインドで追跡するのが難しくなる可能性があります。Modifying FrameworkElement.Name at run time can result in an inconsistent XAML namescope / private field naming alignment, which is hard to keep track of in your code-behind.

x:Name と x:Keyx:Name and x:Key

ResourceDictionary 内の要素に属性として x:Name を適用すると、x:Key 属性の代わりとしての役割を果たしますx:Name can be applied as an attribute to elements within a ResourceDictionary to act as a substitute for the x:Key attribute. (ルールをすべての要素をResourceDictionary X:key または X:name 属性を持つ必要があります)。これはアニメーションを再検討します。(It's a rule that all elements in a ResourceDictionary must have an x:Key or x:Name attribute.) This is common for Storyboarded animations. 詳しくは、「ResourceDictionary と XAML リソースの参照」の各セクションをご覧ください。For more info, see section of ResourceDictionary and XAML resource references.