x:Name-Anweisung

Identifiziert eindeutig XAML-definierte Elemente in einem XAML-Namescope. XAML-Namescopes und ihre Eindeutigkeitsmodelle können auf die instanziierten Objekte angewendet werden, wenn Frameworks APIs bereitstellen oder Verhaltensweisen implementieren, die zur Laufzeit auf das von XAML erstellte Objektdiagramm zugreifen.

Verwendung von XAML-Attributen

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

XAML-Werte

Wert Beschreibung
XAMLNameValue Eine Zeichenfolge, die den Einschränkungen der XamlName-Grammatik entspricht.

Hinweise

Nachdem x:Name auf das zugrunde folgende Programmiermodell eines Frameworks angewendet wurde, entspricht der Name der Variablen, die einen Objektverweis oder eine Instanz enthält, wie von einem Konstruktor zurückgegeben.

Der Wert einer x:Name Direktivenverwendung muss innerhalb eines XAML-Namescopes eindeutig sein. Bei Verwendung durch die .NET XAML Services-API wird der primäre XAML-Namescope standardmäßig im XAML-Stammelement einer einzelnen XAML-Produktion definiert und umfasst die Elemente, die in dieser XAML-Produktion enthalten sind. Zusätzliche diskrete XAML-Namescopes, die innerhalb einer einzelnen XAML-Produktion auftreten können, können von Frameworks definiert werden, um bestimmte Szenarien zu behandeln. Beispielsweise werden in WPF neue XAML-Namescopes von jeder Vorlage definiert und erstellt, die auch für diese XAML-Produktion definiert ist. Weitere Informationen zu XAML-Namescopes (für WPF geschrieben, aber für viele XAML-Namescopekonzepte relevant) finden Sie unter WPF XAML Namescopes.

Im Allgemeinen sollte nicht in Situationen angewendet werden, x:Name in denen ebenfalls verwendet x:Keywird. XAML-Implementierungen durch bestimmte vorhandene Frameworks haben Ersetzungskonzepte zwischen x:Key und x:Nameeingeführt, aber dies ist keine empfohlene Vorgehensweise. .NET-XAML-Dienste unterstützen solche Ersetzungskonzepte bei der Behandlung von Namens-/Schlüsselinformationen wie INameScope oder DictionaryKeyPropertyAttributenicht.

Regeln für die Zulassung von x:Name sowie die Erzwingung der Eindeutigkeit von Namen werden möglicherweise durch bestimmte implementierende Frameworks definiert. Um jedoch mit .NET XAML-Diensten verwendet werden zu können, sollten die Frameworkdefinitionen der EINDEUTIGkeit des XAML-Namescopes mit der Definition der INameScope Informationen in dieser Dokumentation konsistent sein und die gleichen Regeln in Bezug darauf verwenden, wo die Informationen angewendet werden. Beispielsweise unterteilt die implementierung Windows Presentation Foundation (WPF) verschiedene Markupelemente in separate NameScope Bereiche, z. B. Ressourcenwörterbücher, die logische Struktur, die durch XAML auf Seitenebene, Vorlagen und anderen verzögerten Inhalt erstellt wird, und erzwingt dann die EINDEUTIGkeit von XAML-Namen in jedem dieser XAML-Namescopes.

Für benutzerdefinierte Typen, die XAML-Objektwriter von .NET XAML Services verwenden, kann eine Eigenschaft, die einem Typ zugeordnet x:Name ist, erstellt oder geändert werden. Sie definieren dieses Verhalten, indem Sie auf den Namen der Eigenschaft verweisen, die dem im Typdefinitionscode zugeordnet RuntimeNamePropertyAttribute werden soll. RuntimeNamePropertyAttribute ist ein Attribut auf Typebene.

Using.NET XAML-Dienste kann die Unterstützungslogik für xaml-Namescope-Unterstützung frameworkneutral definiert werden, indem die INameScope -Schnittstelle implementiert wird.

Hinweise zur WPF-Verwendung

Unter der Standardbuildkonfiguration für eine WPF-Anwendung, die XAML, partielle Klassen und CodeBehind verwendet, wird der angegebene x:Name zum Namen eines Felds, das im zugrunde liegenden Code erstellt wird, wenn XAML von einer Markupkompilierungsbuildaufgabe verarbeitet wird, und dieses Feld enthält einen Verweis auf das -Objekt. Standardmäßig ist das erstellte Feld intern. Sie können den Feldzugriff ändern, indem Sie das x:FieldModifier-Attribut angeben. In WPF und Silverlight besteht die Sequenz darin, dass die Markupkompilierung das Feld in einer partiellen Klasse definiert und benennt, der Wert jedoch anfänglich leer ist. Anschließend wird eine generierte Methode namens InitializeComponent aus dem Klassenkonstruktor aufgerufen. InitializeComponentFindName besteht aus Aufrufen, die jeden der x:Name Werte verwenden, die im XAML-definierten Teil der partiellen Klasse als Eingabezeichenfolgen vorhanden sind. Die Rückgabewerte werden dann dem ähnlich benannten Feldverweis zugewiesen, um die Feldwerte mit Objekten zu füllen, die aus der XAML-Analyse erstellt wurden. Die Ausführung von InitializeComponent ermöglicht es, direkt mithilfe des Feldnamens /auf das x:Name Laufzeitobjektdiagramm zu verweisen, anstatt explizit aufrufen FindName zu müssen, wenn Sie einen Verweis auf ein XAML-definiertes Objekt benötigen.

Für eine WPF-Anwendung, die die Microsoft Visual Basic verwendet und XAML-Dateien mit Page Buildaktion enthält, wird während der Kompilierung eine separate Verweiseigenschaft erstellt, die das WithEvents Schlüsselwort allen Elementen mit hinzufügt, die über eine x:Nameverfügen, um die Syntax für Ereignishandlerdelegaten zu unterstützenHandles. Diese Eigenschaft ist immer öffentlich. Weitere Informationen finden Sie unter Visual Basic- und WPF-Ereignisbehandlung.

x:Name wird vom WPF-XAML-Prozessor verwendet, um einen Namen zur Ladezeit in einem XAML-Namescope zu registrieren, auch wenn die Seite nicht durch Buildaktionen (z. B. lose XAML eines Ressourcenwörterbuchs) markupkompiliert wird. Ein Grund für dieses Verhalten ist, dass möglicherweise für ElementName die x:Name Bindung benötigt wird. Weitere Informationen finden Sie unter Übersicht über die Datenbindung.

Wie bereits erwähnt, x:Name sollte (oder Name) nicht in Situationen angewendet werden, die ebenfalls verwenden x:Key. WPF ResourceDictionary definiert sich als XAML-Namescope, gibt jedoch nicht implementierte oder NULL-Werte für INameScope APIs zurück, um dieses Verhalten zu erzwingen. Wenn der WPF-XAML-Parser oder in einem XAML-definierten Namex:NameResourceDictionaryauftritt, wird der Name keinem XAML-Namescope hinzugefügt. Der Versuch, diesen Namen aus einem BELIEBIGEn XAML-Namescope und den FindName Methoden zu finden, gibt keine gültigen Ergebnisse zurück.

x:Name und Name

Viele WPF-Anwendungsszenarien können jede Verwendung des x:Name -Attributs vermeiden, da die Name Abhängigkeitseigenschaft, wie im XAML-Standardnamespace angegeben, für mehrere wichtige Basisklassen wie FrameworkElement und FrameworkContentElement diesen Zweck erfüllt. Es gibt immer noch einige gängige XAML- und WPF-Szenarien, in denen der Codezugriff auf ein Element ohne Name Eigenschaft auf Frameworkebene wichtig ist. Bestimmte Animations- und Storyboardunterstützungsklassen unterstützen beispielsweise keine Name Eigenschaft, müssen jedoch häufig im Code referenziert werden, um die Animation zu steuern. Sie sollten als Attribut auf Zeitachsen und Transformationen angeben x:Name , die in XAML erstellt werden, wenn Sie später im Code darauf verweisen möchten.

Wenn Name als Eigenschaft für die -Klasse Name verfügbar ist und x:Name austauschbar als Attribute verwendet werden kann, führt jedoch eine Analyseausnahme, wenn beide für dasselbe Element angegeben sind. Wenn der XAML-Code markupkompiliert ist, tritt die Ausnahme bei der Markupkompilierung auf, andernfalls beim Laden.

Name kann mithilfe der XAML-Attributsyntax und im Code mit SetValuefestgelegt werden. Beachten Sie jedoch, dass das Festlegen der Name -Eigenschaft im Code in den meisten Fällen, in denen der XAML-Code bereits geladen ist, nicht den repräsentativen Feldverweis innerhalb des XAML-Namescopes erstellt. Anstatt zu versuchen, im Code festzulegen Name , verwenden Sie NameScope Methoden aus dem Code für den entsprechenden Namescope.

Name kann auch mithilfe der Eigenschaftenelementsyntax mit innerem Text festgelegt werden, dies ist jedoch ungewöhnlich. Im Gegensatz dazu x:Name kann nicht in der XAML-Eigenschaftenelementsyntax oder im Code mit SetValuefestgelegt werden. Es kann nur mithilfe der Attributsyntax für -Objekte festgelegt werden, da es sich um eine -Direktive handelt.

Silverlight-Verwendungshinweise

x:Name für Silverlight wird separat dokumentiert. Weitere Informationen finden Sie unter XAML-Namespace (x:). Sprachfeatures (Silverlight)

Weitere Informationen: