x:Name-Anweisungx:Name Directive

Identifiziert eindeutig die XAML-definierte Elemente in einem XAML-Namescope.Uniquely identifies XAML-defined elements in a XAML namescope. XAML-Namescopes und ihre Eindeutigkeitsmodelle können auf die instanziierten Objekte angewendet werden, Frameworks bieten APIs oder zum Implementieren von Verhaltensweisen, die das XAML erstellte Objektdiagramm zur Laufzeit zugreifen.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.

Verwendung von XAML-AttributenXAML Attribute Usage

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

XAML-WerteXAML Values

XAMLNameValue Eine Zeichenfolge, die die Einschränkungen der entspricht der XamlName-Grammatik.A string that conforms to the restrictions of the XamlName Grammar.

HinweiseRemarks

Nach dem x:Name angewendet wird, um ein Framework des Programmiermodell, das Sichern, entspricht der Name der Variablen, die einen Objektverweis oder eine Instanz, so wie vom Konstruktor enthält.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.

Der Wert des einem x:Name -Direktive Nutzung muss in einem XAML-Namescope eindeutig sein.The value of an x:Name directive usage must be unique within a XAML namescope. Wird standardmäßig bei der Verwendung von .NET Framework XAML-Dienste-API, der primäre XAML-Namescope ist im XAML-Stammelement einer einzelnen XAML-Produktion definiert und umfasst die Elemente, die in der diese XAML-Produktion enthalten sind.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. Zusätzliche diskreten XAML-Namensbereiche, die innerhalb einer einzelnen XAML-Produktion auftreten können, können von Frameworks für bestimmte Szenarien definiert werden.Additional discrete XAML namescopes that might occur within a single XAML production can be defined by frameworks to address specific scenarios. Z. B. in WPF können sind neue XAML-Namescopes definiert und erstellt, die von beliebigen Vorlagen, die auch für diese XAML-Produktion definiert ist.For example, in WPF, new XAML namescopes are defined and created by any template that is also defined on that XAML production. Weitere Informationen zu XAML-Namescopes (geschrieben für WPF, aber für viele Konzepte von XAML-Namescope relevant), finden Sie unter WPF-XAML-Namescopes.For more information about XAML namescopes (written for WPF but relevant for many XAML namescope concepts), see WPF XAML Namescopes.

Im allgemeinen x:Name sollten in Situationen, in denen auch verwenden, nicht angewendet werden x:Key.In general, x:Name should not be applied in situations that also use x:Key. XAML-Implementierungen von bestimmten vorhandenen Frameworks eingeführt, Ersetzungskonzepte zwischen x:Key und x:Name, allerdings wird nicht empfohlen.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-Dienste unterstützt keine solche Ersetzungskonzepte beim Behandeln von Namen/Schlüssel Informationen wie z. B. INameScope oder DictionaryKeyPropertyAttribute..NET Framework XAML Services does not support such substitution concepts when handling name/key information such as INameScope or DictionaryKeyPropertyAttribute.

Regeln für Permittance von x:Name sowie die Namen Eindeutigkeit Erzwingung werden möglicherweise von bestimmten implementierende Frameworks definiert.Rules for permittance of x:Name as well as the name uniqueness enforcement are potentially defined by specific implementing frameworks. Allerdings um mit .NET Framework-XAML-Diensten verwendet werden, die Frameworkdefinitionen von XAML-Namescope Eindeutigkeit muss konsistent mit der Definition der INameScope Informationen in dieser Dokumentation und sollten die gleichen Regeln in Bezug auf den Speicherort der Informationen wird angewendet.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. Z. B. die Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) Implementierung teilt verschiedene Markupelemente in separaten NameScope Bereiche, z. B. Ressourcenverzeichnisse, die logische Struktur erstellt, indem der auf Seitenebene XAML, Vorlagen und andere verzögerte Inhalt, und klicken Sie dann erzwingt XAML Eindeutigkeit des Namens innerhalb aller dieser XAML-Namescopes.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.

Für benutzerdefinierte Typen, die .NET Framework XAML Services XAML-Objektwriter verwenden, eine Eigenschaft, der zugeordnet x:Name auf ein Typ festgelegt oder geändert werden kann.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. Definieren Sie dieses Verhalten durch Verweis auf den Namen der Eigenschaft zugeordnet werden soll die RuntimeNamePropertyAttribute in den Typcode der Definition.You define this behavior by referencing the name of the property to map with the RuntimeNamePropertyAttribute in the type definition code. RuntimeNamePropertyAttribute ist ein Attribut auf Typebene.RuntimeNamePropertyAttribute is a type-level attribute.

Frameworkneutrale Framework-XAML-Dienste, die dahinter liegende Logik für XAML-Namescope-Unterstützung kann in einer Weise definiert werden, durch die Implementierung der INameScope Schnittstelle.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.

Hinweise zur WPF-VerwendungWPF Usage Notes

In der standard Buildkonfiguration für eine WPFWPF Anwendung, die XAML, partielle Klassen und Code-Behind muss die angegebene verwendet x:Name wird der Name eines Felds, das in der zugrunde liegenden erstellt wird code, wenn XAMLXAML wird durch ein Markup verarbeitet Kompilierung-Buildaufgabe erstellen und dieses Feld enthält einen Verweis auf das Objekt.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. Standardmäßig ist das erstellte Feld intern.By default, the created field is internal. Sie können den Feldzugriff ändern, durch Angabe der X: FieldModifier-Attribut.You can change field access by specifying the x:FieldModifier attribute. In WPF und Silverlight ist die Sequenz an, dass die Markupkompilierung definiert und Namen das Feld in einer partiellen Klasse, aber der Wert zunächst leer ist.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. Klicken Sie dann eine generierte Methode mit dem Namen InitializeComponent innerhalb der Konstruktor der Klasse aufgerufen wird.Then, a generated method named InitializeComponent is called from within the class constructor. InitializeComponent besteht aus FindName aufruft, indem Sie die x:Name Zeichenfolgen zur Eingabe von Werten, die in der XAML-definierten Teil der partiellen Klasse als vorhanden sind.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. Die Rückgabewerte werden anschließend füllen die Feldwerte mit Objekten, die aus XAML erstellt wurden, analysieren, den Feldverweis mit ähnlichen Namen zugewiesen.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. Die Ausführung von InitializeComponent ermöglichen es zu verweisen, das zur Laufzeit Diagramm mit den x:Name / Feldname direkt aufrufen, anstatt FindName explizit jederzeit benötigen Sie einen Verweis auf ein XAML-Objekt.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.

Für eine WPF-Anwendung, das Microsoft Visual Basic verwendet, ausgerichtet ist, und umfasst XAML-Dateien mit der Page Buildaktion, eine Eigenschaft für einen separaten wird erstellt, während der Kompilierung der WithEvents Schlüsselwort, um alle Elemente, deren ein x:NameUnterstützung Handles Syntax für Ereignishandlerdelegaten.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. Diese Eigenschaft ist immer öffentlich.This property is always public. Weitere Informationen finden Sie unter Visual Basic- und WPF-Ereignisbehandlung.For more information, see Visual Basic and WPF Event Handling.

x:Name wird von der WPF XAML-Prozessor verwendet, um einen Namen in einem XAML-Namescope zur Ladezeit auch registrieren, in dem die Seite nicht von Buildvorgängen (z. B. loose XAML eines Ressourcenverzeichnisses) markupkompiliert ist.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). Ein Grund für dieses Verhalten ist, da die x:Name ist ggf. für ElementName Bindung.One reason for this behavior is because the x:Name is potentially needed for ElementName binding. Weitere Informationen finden Sie unter Übersicht über die Datenbindung.For details, see Data Binding Overview.

Wie bereits erwähnt, x:Name (oder Name) sollten in Situationen, in denen auch verwenden, nicht angewendet werden x:Key.As mentioned previously, x:Name (or Name) should not be applied in situations that also use x:Key. Die WPFWPF ResourceDictionary verfügt über ein spezielles Verhalten von sich selbst als ein XAML-Namescope definiert, aber nicht implementiert oder null-Werte zurückgegeben INameScope -APIs als eine Möglichkeit, dieses Verhalten zu erzwingen.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. Wenn der WPF XAML-Parser erkennt Name oder x:Name in einer XAML-definierten ResourceDictionary, der Name wird nicht auf einem XAML-Namescope hinzugefügt.If the WPF XAML parser encounters Name or x:Name in a XAML-defined ResourceDictionary, the name is not added to any XAML namescope. Es wird versucht, diesen Namen in einem XAML-Namescope gefunden und die FindName Methoden keine gültige Ergebnisse zurück.Attempting to find that name from any XAML namescope and the FindName methods will not return valid results.

X: Name und Namex:Name and Name

Viele WPF-Anwendungsszenarien können vermeiden, dass jede Verwendung von der x:Name Attribut, da die Name Abhängigkeitseigenschaft wie angegeben in der Standard-XAML-Namespace für eine Reihe von wichtigen Basisklassen wie z. B. FrameworkElement und FrameworkContentElement denselben Zweck erfüllt.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. Es gibt noch einige häufig verwendete XAML und WPF-Szenarien, in denen code Zugriff auf ein Element ohne Name Eigenschaft auf der Frameworkebene ist wichtig.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. Bestimmte Animationen und Storyboards Unterstützungsklassen unterstützen z. B. keine Name -Eigenschaft, aber sie müssen häufig im Code verwiesen werden, um die Animation zu steuern.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. Geben Sie x:Name als Attribut für die Zeitachsen und Transformationen, die in XAML, erstellt werden, wenn Sie beabsichtigen, die sie später in Code verweisen.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.

Wenn Name steht als Eigenschaft in der Klasse Name und x:Name Synonym als Attribute verwendet werden können, aber eine Analyseausnahme führt, wenn beide auf dasselbe Element angegeben werden.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. Ist die XAML-Markup kompiliert, wird die Ausnahme bei der Markupkompilierung auftreten tritt sie andernfalls beim Laden.If the XAML is markup compiled, the exception will occur on the markup compile, otherwise it occurs on load.

Name kann mithilfe der XAML-Attributsyntax festgelegt werden und in Code mit SetValue; Beachten Sie jedoch die Einstellung der Name Eigenschaft im Code erstellt den repräsentativen Feldverweis innerhalb des XAML-Namescope keine in den meisten Fällen, in dem die XAML bereits wird, geladen.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. Nicht versucht wird, legen Sie Name im Code verwenden, NameScope Methoden aus dem Code für den entsprechenden Namensbereich.Instead of attempting to set Name in code, use NameScope methods from code, against the appropriate namescope.

Name kann auch mithilfe von Eigenschaftenelement-Syntax mit dem inneren Text festgelegt werden, aber das ist nicht üblich.Name can also be set using property element syntax with inner text, but that is uncommon. Im Gegensatz dazu x:Name kann nicht festgelegt werden, im Eigenschaftenelement-Syntax XAML oder in Code mit SetValue; es kann nur festgelegt werden mithilfe der Attributsyntax für Objekte, da es sich um eine Direktive ist.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-VerwendungshinweiseSilverlight Usage Notes

x:Name für Silverlight wird separat dokumentiert.x:Name for Silverlight is documented separately. Weitere Informationen finden Sie unter XAML-Namespace (x:)) Sprachfunktionen (Silverlight).For more information, see XAML Namespace (x:) Language Features (Silverlight).

Siehe auchSee also