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

XAML 名前スコープ内の XAML で定義された要素を一意に識別します。Uniquely identifies XAML-defined elements in a XAML namescope. XAML 名前スコープとその一意性モデルは、フレームワーク Api を提供または実行時に、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.

RemarksRemarks

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 Framework XAML サービスの API で使用するとき、プライマリ XAML 名前スコープが 1 つの XAML 運用環境の XAML ルート要素で定義されており、その XAML 運用環境で格納されている要素が含まれます。By default when used by .NET Framework 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. XAML の個別の名前の 1 つの 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 名前スコープの概念に関連が記述 for WPF) 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 framework XAML サービスがこのような代替の概念をサポートしていませんなどの名前/キーの情報を処理するときにINameScopeまたはDictionaryKeyPropertyAttributeします。.NET Framework XAML Services does not support such substitution concepts when handling name/key information such as INameScope or DictionaryKeyPropertyAttribute.

規則の permittancex:Nameと名前の一意性の強制が実装する特定のフレームワークによって定義可能性があります。Rules for permittance of x:Name as well as the name uniqueness enforcement are potentially defined by specific implementing frameworks. ただし、.NET Framework XAML サービスで使用するのには、フレームワーク定義の XAML 名前スコープの一意性の定義と一貫性のあるINameScope、このドキュメントに情報と場所に関する規則と同じ規則を使用する必要があります、情報が適用されます。However, to be usable with .NET Framework 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 Framework XAML サービスの XAML オブジェクト ライターを使用するカスタムの型のプロパティにマップされるx:Nameで型を確立または変更できます。For custom types that use .NET Framework 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.

フレームワークに依存しない方法で実装することで定義できます Using.NET Framework XAML サービスの XAML 名前スコープのサポートのバッキング ロジック、INameScopeインターフェイス。Using.NET Framework 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

標準的なビルド構成の下で、WPFWPFは、XAML、部分クラス、および分離コードで指定したアプリケーション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のそれぞれを使用して呼び出し、x:Name部分クラスとしての XAML 定義の一部に存在する値が文字列を入力します。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ランタイム オブジェクト グラフを使用して、参照できるように、x:Nameフィールド名を直接呼び出すのではなく/FindNameいつでも明示的に XAML 定義のオブジェクトへの参照が必要です。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.

WPF の Microsoft Visual Basic を使用するアプリケーションを対象し、XAML ファイルが含まれますPageビルド アクションでは、個別の参照プロパティが追加のコンパイル時に作成された、 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 ページがない場合 (たとえば、loose 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). この動作の理由の 1 つがあるため、x: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:Name(またはName) を使用する場合に適用しないx:Keyします。As mentioned previously, x:Name (or Name) should not be applied in situations that also use x:Key. WPFWPF ResourceDictionary XAML 名前スコープとして定義すること自体が実装されていないまたは null 値を取得するのに特別な動作がINameScopeApi としてこの動作を強制する方法。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 パーサーが検出した場合Nameまたはx:NameXAML 定義でResourceDictionary名前は任意の 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属性があるため、Name依存関係プロパティとして、既定の XAML 名前空間などの指定された重要な基本クラスのいくつかFrameworkElementFrameworkContentElementこの同じ目的を満たします。Many 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. 一般的な XAML と WPF のシナリオは引き続き no を持つ要素へのアクセスをコードがNameフレームワーク レベルのプロパティが重要です。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は、クラスのプロパティとして使用可能なNamex: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.

Name XAML 属性の構文を使用して設定することができ、コードを使用して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 Namespace (x:)。言語機能 (Silverlight)します。For more information, see XAML Namespace (x:) Language Features (Silverlight).

関連項目See also