x:Name-Attribut
Aktualisiert: November 2007
Identifiziert Objektelemente auf eindeutige Weise, damit aus Code-Behind oder allgemeinem Code auf das instanziierte Element zugegriffen werden kann. Nachdem dieses Attribut auf ein Sicherungsprogrammiermodell angewendet wurde, kann x:Name als gleichwertig mit der Variablen angesehen werden, die einen Objektverweis enthält, der von einem Konstruktor zurückgegeben wird.
Verwendung von XAML-Attributen
<object x:Name="XAMLNameValue".../>
XAML-Werte
XAMLNameValue |
Eine Zeichenfolge, die den Einschränkungen der XamlName-Grammatik entspricht. |
Hinweise
Unter der Standardbuildkonfiguration für ein WPF-Anwendungsprojekt, das XAML, partielle Klasse und Code-Behind verwendet, wird der angegebene x:Name zum Namen des Felds, das im zugrunde liegenden Code erstellt wird, wenn die XAML-Daten verarbeitet werden. Dieses Feld enthält einen Verweis auf das Objekt.
Standardmäßig ist das erstellte Feld ein internes Feld. Sie können den Feldzugriff ändern, indem Sie das x:FieldModifier-Attribut angeben.
Für eine Anwendung, die die Microsoft Visual Basic .NET-Ziele verwendet und XAML-Dateien enthält, wird während der Kompilierung eine separate Verweiseigenschaft erstellt. Diese Eigenschaft fügt das WithEvents-Schlüsselwort allen Elementen hinzu, die über einen x:Name verfügen, um die Handles-Syntax für Ereignishandlerdelegaten zu unterstützen. Diese Eigenschaft ist immer öffentlich. Ausführliche Informationen finden Sie unter Visual Basic- und WPF-Ereignisbehandlung.
x:Name muss innerhalb eines Namensbereichs eindeutig sein. In den meisten XAML-Fällen wird der primäre Namensbereich von den Elementen definiert, die auf einer einzelnen XAML-Seite enthalten sind. Zusätzliche diskrete Namensbereiche werden von allen Vorlagen definiert, die auf der Seite ebenfalls definiert sind. Weitere Informationen zu Namensbereichaspekten finden Sie unter WPF-Namescopes.
x:Name wird von einem XAML-Prozessor verwendet, um einen Namen in einem Namensbereich zu registrieren. Dies gilt auch für Fälle, in denen die Seite nicht kompiliert wird (z. B. lose XAML-Daten). Dies liegt daran, dass der x:Name ggf. für die ElementName-Bindung benötigt wird. Ausführliche Informationen finden Sie unter Übersicht über Datenbindung.
x:Name kann in bestimmten Bereichen der WPF-Programmierung nicht angewendet werden. So können z. B. Elemente in einem ResourceDictionary keine Namen aufweisen, da ResourceDictionary ein besonderes Verhalten aufweist, sich selbst zwar als XAML-Namensbereich zu definieren, für die INameScope-Schlüssel-APIs jedoch Nicht implementiert zurückzugeben.
Die Regeln für die Zulässigkeit von x:Name sowie die Eindeutigkeitsbestimmung werden von der zugrunde liegenden Windows Presentation Foundation (WPF)-Frameworkimplementierung definiert, die die verschiedenen Markupelemente in separate NameScope-Bereiche unterteilt, z. B. Ressourcenwörterbücher, die von der XAML auf Seitenebene erstellte logische Elementstruktur, Vorlagen usw.
Einige WPF-Frameworkanwendungen sind ggf. in der Lage, jegliche Verwendung des x:Name-Attributs zu verhindern, da die Name-Abhängigkeitseigenschaft, die im WPF-Namespace für mehrere der wichtigen Basisklassen wie FrameworkElement/FrameworkContentElement angegeben ist, denselben Zweck erfüllt. Es gibt noch einige gängige XAML- und Frameworkszenarios, bei denen der Codezugriff auf ein Element ohne Name-Eigenschaft erforderlich ist, vor allem in bestimmten Animations- und Storyboard-Unterstützungsklassen. Sie müssen x:Name z. B. für Zeitachsen und Transformationen angeben, die in XAML erstellt wurden, wenn Sie aus dem Code heraus darauf verweisen möchten.
Wenn Name als Eigenschaft eines Elements in der Klasse verfügbar ist, können Name und x:Name austauschbar als Attribute verwendet werden, aber es tritt ein Fehler auf, wenn beide für ein und dasselbe Element angegeben werden.
Bei benutzerdefinierten Elementen kann die Eigenschaft (entweder eine CLR-Eigenschaft oder eine Abhängigkeitseigenschaft), die für ein bestimmtes Objekt x:Name zugeordnet ist, eingerichtet oder geändert werden, indem die Eigenschaft in ihrem Deklarationscode mit dem RuntimeNamePropertyAttribute bezeichnet wird.
Sie können Name mithilfe der XAML-Attributsyntax und im Code mithilfe von SetValue festlegen. Beachten Sie jedoch, dass das Festlegen der Name-Eigenschaft im Code in einigen Fällen nicht dazu führt, dass der repräsentative Feldverweis im Namensbereich erstellt wird. Statt zu versuchen, Name in Code festzulegen, verwenden Sie die NameScope-Methoden aus dem Code für den entsprechenden Namensbereich.
Name kann auch mithilfe der XAML-Eigenschaftenelementsyntax mit innerem Text verwendet werden, dies ist jedoch nicht üblich. x:Name kann nicht mithilfe von SetValue in der XAML-Eigenschaftenelementsyntax oder in Code verwendet werden. Er kann nur mithilfe der Attributsyntax in Elementen festgelegt werden.