Freigeben über


x:Name-Attribut

Identifiziert Objektelemente eindeutig für den Zugriff auf das instanziierte Objekt aus der Code-Behind-Datei oder allgemeinem Code. Nach Anwendung auf ein zugrundeliegendes Programmiermodell kann x:Name als äquivalent zur Variable betrachtet werden, die einen Objektverweis enthält, wie er von einem Konstruktor zurückgegeben wird.

XAML-Attributverwendung

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

XAML-Werte

Begriff Description
XAMLNameValue Eine Zeichenfolge, die den Einschränkungen der XamlName-Grammatik entspricht.

XamlName-Grammatik

Nachfolgend sehen Sie die normative Grammatik für eine Zeichenfolge, die in dieser XAML-Implementierung als Schlüssel verwendet wird:

XamlName ::= NameStartChar (NameChar)*
NameStartChar ::= LetterCharacter | '_'
NameChar ::= NameStartChar | DecimalDigit
LetterCharacter ::= ('a'-'z') | ('A'-'Z')
DecimalDigit ::= '0'-'9'
CombiningCharacter::= none
  • Zeichen sind auf den unteren ASCII-Bereich beschränkt, insbesondere auf Groß- und Kleinbuchstaben, Ziffern und das Unterstrichzeichen (_).
  • Der Unicode-Zeichenbereich wird nicht unterstützt.
  • Ein Name kann nicht mit einer Ziffer beginnen. Einige Toolimplementierungen stellen einen Unterstrich (_) einer Zeichenfolge voran, wenn der Benutzer eine Ziffer als Anfangszeichen bereitstellt, oder das Tool generiert x:Name-Werte basierend auf anderen Werten, die Ziffern enthalten.

Bemerkungen

Der angegebene x:Name wird zum Namen eines Felds, das beim Verarbeiten von XAML im zugrunde liegenden Code erstellt wird, und dieses Feld enthält einen Verweis auf das Objekt. Der Prozess zum Erstellen dieses Felds wird von den MSBuild-Zielschritten ausgeführt, die auch für das Verknüpfen der Teilklassen einer XAML-Datei mit ihrem Code-Behind verantwortlich sind. Dieses Verhalten ist nicht zwingend durch die XAML-Sprache vorgeschrieben; es ist die spezielle Implementierung, die XAML-Programmierung in der Universellen Windows-Plattform (UWP) nutzt, um x:Name in ihren Programmier- und Anwendungsmodellen zu verwenden.

Jeder definierte x:Name muss innerhalb eines XAML-Namenscopes eindeutig sein. Im Allgemeinen wird ein XAML-NameScope auf der Stammelementebene einer geladenen Seite definiert und enthält alle Elemente unter diesem Element auf einer einzelnen XAML-Seite. Zusätzliche XAML-Namensbereiche werden durch jede auf dieser Seite definierte Steuerelementvorlage oder Datenvorlage festgelegt. Zur Laufzeit wird ein weiterer XAML-NameScope für den Stamm der Objektstruktur erstellt, die aus einer angewendeten Steuerelementvorlage erstellt wird, und auch von Objektstrukturen, die aus einem Aufruf von XamlReader.Load erstellt werden. Weitere Informationen finden Sie unter XAML-NameScopes.

Entwurfstools generieren bei der Einführung in die Entwurfsoberfläche häufig automatisch x:Name-Werte für Elemente. Das Schema für die automatische Generierung variiert je nachdem, welchen Designer Sie verwenden, aber ein typisches Schema besteht darin, eine Zeichenfolge zu generieren, die mit dem Klassennamen beginnt, der das Element zurückgibt, gefolgt von einer voranschreitenden ganzen Zahl. Wenn Sie beispielsweise das erste Button-Element in den Designer einführen, sehen Sie möglicherweise, dass dieses Element im XAML-Code den x:Name-Attributwert "Button1" aufweist.

x:Name kann nicht in der XAML-Eigenschaftselementsyntax oder im Code mit SetValue festgelegt werden. x:Name kann nur mithilfe der XAML-Attributsyntax für Elemente festgelegt werden.

Hinweis

Speziell für C++/CX-Apps wird kein Sicherungsfeld für einen x:Name-Verweis für das Stammelement einer XAML-Datei oder -Seite erstellt. Wenn Sie auf das Stammobjekt aus C++-Code-Behind verweisen müssen, verwenden Sie andere APIs oder Baumtraversierung. Sie können beispielsweise FindName für ein bekanntes benanntes untergeordnetes Element aufrufen und dann "Parent" aufrufen.

x:Name und andere Name-Eigenschaften

Einige typen, die in XAML verwendet werden, weisen auch eine Eigenschaft mit dem Namen Name auf. Beispiel: FrameworkElement.Name und TextElement.Name.

Wenn Name als settable-Eigenschaft für ein Element verfügbar ist, kann Name und x:Name in XAML austauschbar verwendet werden, aber es wird ein Fehler zurückgegeben, wenn beide Attribute für dasselbe Element angegeben werden. Es gibt auch Fälle, in denen es eine Name-Eigenschaft gibt und diese schreibgeschützt ist (z. B. VisualState.Name). Wenn dies der Fall ist, verwenden Sie immer "x:Name ", um dieses Element im XAML-Code zu benennen, und der schreibgeschützte Name ist für ein weniger gängiges Codeszenario vorhanden.

Beachten Sie, dass FrameworkElement.Name im Allgemeinen nicht als Möglichkeit zum Ändern von Werten verwendet werden sollten, die ursprünglich von x:Name festgelegt wurden, obwohl es einige Szenarien gibt, die Ausnahmen von dieser allgemeinen Regel sind. In typischen Szenarien ist die Erstellung und Definition von XAML-NameScopes ein XAML-Prozessorvorgang. Das Ändern von FrameworkElement.Name zur Laufzeit kann zu einer inkonsistenten XAML-NameScope-/Privaten Feldbenennungsausrichtung führen, die in Ihrem CodeBehind schwer nachverfolgt werden kann.

x:Name und x:Key

x:Name kann als Attribut auf Elemente in einem ResourceDictionary angewendet werden, um als Ersatz für das x:Key-Attribut zu fungieren. (Es ist eine Regel, dass alle Elemente in einem ResourceDictionary über ein x:Key- oder x:Name-Attribut verfügen müssen.) Dies ist üblich für Storyboardanimationen. Weitere Informationen finden Sie im Abschnitt " ResourceDictionary" und "XAML-Ressourcenverweise".