x:Name ディレクティブx:Name Directive

XAML 名前スコープ内の XAML で定義された要素を一意に識別します。Uniquely identifies XAML-defined elements in a XAML namescope. フレームワークが API を提供する場合、または実行時に XAML で作成されたオブジェクト グラフにアクセスする動作を実装する場合、XAML 名前スコープとその一意性モデルをインスタンス化されたオブジェクトに適用できます。XAML namescopes and their uniqueness models can be applied to the instantiated objects, when frameworks provide APIs or implement behaviors that access the XAML-created object graph at run time.

XAML 属性の使用方法XAML Attribute Usage

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

XAML 値XAML Values

XAMLNameValue XamlName の文法の制限に準拠する文字列。A string that conforms to the restrictions of the XamlName Grammar.

解説Remarks

フレームワークx:Nameのバッキング プログラミング モデルに適用された後、名前は、オブジェクト参照またはコンストラクターによって返されるインスタンスを保持する変数と同じです。After x:Name is applied to a framework's backing programming model, the name is equivalent to the variable that holds an object reference or an instance as returned by a constructor.

ディレクティブの使用法x:Nameの値は、XAML 名前スコープ内で一意である必要があります。The value of an x:Name directive usage must be unique within a XAML namescope. 既定では、.NET XAML サービス API によって使用される場合、プライマリ XAML 名前スコープは、単一の XAML 運用環境の XAML ルート要素で定義され、その XAML 運用環境に含まれる要素を包含します。By default when used by .NET XAML Services API, the primary XAML namescope is defined at the XAML root element of a single XAML production, and encompasses the elements that are contained in that XAML production. 1 つの XAML プロダクション内で発生する可能性のある別々の XAML 名前スコープを、特定のシナリオに対処するためにフレームワークによって定義できます。Additional discrete XAML namescopes that might occur within a single XAML production can be defined by frameworks to address specific scenarios. たとえば、WPF では、新しい XAML 名前スコープは、その XAML の運用環境でも定義されている任意のテンプレートによって定義および作成されます。For example, in WPF, new XAML namescopes are defined and created by any template that is also defined on that XAML production. XAML 名前スコープの詳細については、(WPF 用に作成されたが、多くの XAML 名前スコープの概念に関連する)を参照してくださいFor more information about XAML namescopes (written for WPF but relevant for many XAML namescope concepts), see WPF XAML Namescopes.

一般にx:Name、 を使用x:Keyする状況では適用しないでください。In general, x:Name should not be applied in situations that also use x:Key. 特定の既存のフレームワークによる XAML 実装では、x:Keyx:Nameの間に置換の概念が導入されていますが、これは推奨される方法ではありません。XAML implementations by specific existing frameworks have introduced substitution concepts between x:Key and x:Name, but that is not a recommended practice. NET XAML サービスは、 やINameScopeDictionaryKeyPropertyAttributeなどの名前/キー情報を処理する際に、このような置換の概念をサポートしていません。.NET XAML Services does not support such substitution concepts when handling name/key information such as INameScope or DictionaryKeyPropertyAttribute.

許可の規則と名前x:Nameの一意性の適用は、特定の実装フレームワークによって定義される可能性があります。Rules for permittance of x:Name as well as the name uniqueness enforcement are potentially defined by specific implementing frameworks. ただし、.NET XAML Services で使用できるようにするには、XAML 名前スコープの一意性のフレームワーク定義は、このドキュメントINameScopeの情報の定義と一致し、情報が適用される場所に関して同じ規則を使用する必要があります。However, to be usable with .NET XAML Services, the framework definitions of XAML namescope uniqueness should be consistent with the definition of INameScope information in this documentation, and should use the same rules regarding where the information is applied. たとえば、実装ではWindows Presentation Foundation (WPF)Windows Presentation Foundation (WPF)、リソース ディクショナリ、ページ レベルNameScopeの XAML、テンプレート、およびその他の遅延コンテンツによって作成された論理ツリーなど、さまざまなマークアップ要素を別々の範囲に分割し、それらの XAML 名前スコープ内で XAML 名前の一意性を適用します。For example, the Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) implementation divides various markup elements into separate NameScope ranges, such as resource dictionaries, the logical tree created by the page-level XAML, templates, and other deferred content, and then enforces XAML name uniqueness within each of those XAML namescopes.

.NET XAML サービス XAML オブジェクト ライターを使用するカスタム型の場合x:Name、型にマップされるプロパティを確立または変更できます。For custom types that use .NET XAML Services XAML object writers, a property that maps to x:Name on a type can be established or changed. この動作は、型定義コードでマップRuntimeNamePropertyAttributeするプロパティの名前を参照することによって定義します。You define this behavior by referencing the name of the property to map with the RuntimeNamePropertyAttribute in the type definition code. RuntimeNamePropertyAttributeは、型レベルの属性です。RuntimeNamePropertyAttribute is a type-level attribute.

XAML サービスINameScopeUsing.NET、XAML 名前スコープのサポートのバッキング ロジックは、インターフェイスを実装することで、フレームワークに依存しない方法で定義できます。Using.NET XAML Services, the backing logic for XAML namescope support can be defined in a framework-neutral way by implementing the INameScope interface.

WPF の使用上の注意WPF Usage Notes

XAML、部分クラス、および分離WPFWPFコードを使用するアプリケーションの標準ビルド構成では、マークアップ コンパイルx:Nameビルド タスクによって処理されるときにXAMLXAML基になるコードで作成されるフィールドの名前が指定され、そのフィールドはオブジェクトへの参照を保持します。Under the standard build configuration for a WPFWPF application that uses XAML, partial classes, and code-behind, the specified x:Name becomes the name of a field that is created in the underlying code when XAMLXAML is processed by a markup compilation build task, and that field holds a reference to the object. 既定では、作成されるフィールドは内部フィールドです。By default, the created field is internal. フィールド アクセスを変更するには、 x:FieldModifier 属性を指定します。You can change field access by specifying the x:FieldModifier attribute. WPF および Silverlight では、マークアップ コンパイルで部分クラスのフィールドを定義して名前を付けますが、値は最初は空です。In WPF and Silverlight, the sequence is that the markup compile defines and names the field in a partial class, but the value is initially empty. 次に、生成されたメソッドInitializeComponentがクラス コンストラクタ内から呼び出されます。Then, a generated method named InitializeComponent is called from within the class constructor. InitializeComponentは、FindName部分クラスの XAMLx:Name定義部分に存在する各値を入力文字列として使用する呼び出しで構成されます。InitializeComponent consists of FindName calls using each of the x:Name values that exist in the XAML-defined part of the partial class as input strings. その後、戻り値は、XAML 解析から作成されたオブジェクトでフィールド値を埋めるために、名前の似たフィールド参照に代入されます。The return values are then assigned to the like-named field reference to fill the field values with objects that were created from XAML parsing. 実行InitializeComponentすると、XAML 定義オブジェクトへの参照が必要な場合はいつでもx:Name明示的に呼び出すFindName必要がなくても、/ フィールド名を使用して実行時オブジェクト グラフを直接参照できます。The execution of InitializeComponent make it possible to reference the run time object graph using the x:Name / field name directly, rather than having to call FindName explicitly any time you need a reference to a XAML-defined object.

Microsoft Visual Basic のターゲットを使用し、ビルド アクションにPageXAML ファイルを含む WPF アプリケーションの場合、WithEventsコンパイル時に、イベント ハンドラーx:NameデリゲートのHandles構文をサポートするために、 を持つすべての要素にキーワードを追加する個別の参照プロパティが作成されます。For a WPF application that uses the Microsoft Visual Basic targets and includes XAML files with Page build action, a separate reference property is created during compilation that adds the WithEvents keyword to all elements that have an x:Name, to support Handles syntax for event handler delegates. このプロパティは常にパブリックです。This property is always public. 詳細については、「Visual Basic と WPF のイベント処理」を参照してください。For more information, see Visual Basic and WPF Event Handling.

x:Nameは、ページがビルド アクション (リソース ディクショナリの緩い XAML など) によってマークアップ コンパイルされていない場合でも、読み込み時に XAML 名前スコープに名前を登録するために WPF XAML プロセッサによって使用されます。x:Name is used by the WPF XAML processor to register a name into a XAML namescope at load time, even for cases where the page is not markup-compiled by build actions (for example, loose XAML of a resource dictionary). この動作の理由の 1x:Nameつは、 がElementNameバインドに必要になる可能性があるためです。One reason for this behavior is because the x:Name is potentially needed for ElementName binding. 詳細については、「データ バインディングの概要」を参照してください。For details, see Data Binding Overview.

前に述べたようにx:NameName( または ) は、 もx:Key使用する状況では適用しないでください。As mentioned previously, x:Name (or Name) should not be applied in situations that also use x:Key. WPFWPFには、XAML 名前スコープとして定義するが、この動作を強制する方法として API のINameScopeNot Implemented 値または null 値を返す特別な動作ResourceDictionaryがあります。The WPFWPF ResourceDictionary has a special behavior of defining itself as a XAML namescope but returning Not Implemented or null values for INameScope APIs as a way to enforce this behavior. WPF XAML パーサーがNameXAMLx:Nameで定義されたResourceDictionaryを検出した場合、または XAML で定義された名前は、XAML 名前スコープに追加されません。If the WPF XAML parser encounters Name or x:Name in a XAML-defined ResourceDictionary, the name is not added to any XAML namescope. XAML 名前スコープとそのメソッドからその名前をFindName検索しようとしても、有効な結果が返されません。Attempting to find that name from any XAML namescope and the FindName methods will not return valid results.

x:名前と名前x:Name and Name

WPF アプリケーションの多くのシナリオでは、属性のx:Name使用を回避できますNameFrameworkElement FrameworkContentElementMany WPF application scenarios can avoid any use of the x:Name attribute, because the Name dependency property as specified in the default XAML namespace for several of the important base classes such as FrameworkElement and FrameworkContentElement satisfies this same purpose. フレームワーク レベルでプロパティを持たないName要素へのコード アクセスが重要な一般的な XAML および WPF のシナリオがまだいくつか存在します。There are still some common XAML and WPF scenarios where code access to an element with no Name property at the framework level is important. たとえば、特定のアニメーションおよびストーリーボードサポートクラスはプロパティをNameサポートしていませんが、アニメーションを制御するためにコードで参照する必要がよくあります。For example, certain animation and storyboard support classes do not support a Name property, but they often need to be referenced in code in order to control the animation. 後でコードx:Nameから参照する場合は、XAML で作成されるタイムラインと変換の属性として指定する必要があります。You should specify x:Name as an attribute on timelines and transforms that are created in XAML, if you intend to reference them from code later.

クラスNameのプロパティとして使用でき、Name属性として同じx:Name意味で使用できますが、同じ要素に両方が指定されている場合は解析例外が発生します。If Name is available as a property on the class, Name and x:Name can be used interchangeably as attributes, but a parse exception will result if both are specified on the same element. XAML がマークアップ コンパイルされている場合、例外はマークアップ コンパイルで発生します。If the XAML is markup compiled, the exception will occur on the markup compile, otherwise it occurs on load.

NameXAML 属性構文を使用して、コード内で設定SetValueできます。ただし、コードでプロパティNameを設定しても、XAML が既に読み込まれているほとんどの状況では、XAML 名前スコープ内での代表的なフィールド参照は作成されません。Name can be set using XAML attribute syntax, and in code using SetValue; note however that setting the Name property in code does not create the representative field reference within the XAML namescope in most circumstances where the XAML is already loaded. コードで設定Nameする代わりに、適切な名前NameScopeスコープに対してコードのメソッドを使用します。Instead of attempting to set Name in code, use NameScope methods from code, against the appropriate namescope.

Name内部テキストを含むプロパティ要素構文を使用して設定することもできますが、これは一般的ではありません。Name can also be set using property element syntax with inner text, but that is uncommon. これに対しx:Name、XAML プロパティ要素構文や、コードでの設定はSetValueできません。ディレクティブであるため、オブジェクトに対する属性構文を使用してのみ設定できます。In contrast, x:Name cannot be set in XAML property element syntax, or in code using SetValue; it can only be set using attribute syntax on objects because it is a directive.

Silverlight の使用上の注意Silverlight Usage Notes

Silverlight 用の x:Name に関しては、別途ドキュメントが用意されています。x:Name for Silverlight is documented separately. 詳細については、「XAML 名前空間 (x:)」を参照してください。言語機能 (シルバーライト)For more information, see XAML Namespace (x:) Language Features (Silverlight).

関連項目See also