x:Name-Attribut
Identifiziert Objektelemente eindeutig für den Zugriff auf das instanziierte Objekt aus CodeBehind oder allgemeinem Code. Nach anwendung auf ein sicherungsendes Programmiermodell kann x:Name als gleichwertig mit der Variablen betrachtet werden, die einen Objektverweis enthält, wie sie von einem Konstruktor zurückgegeben wird.
XAML-Attributsyntax
<object x:Name="XAMLNameValue".../>
XAML-Werte
Begriff | Beschreibung |
---|---|
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.
Hinweise
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 Partiellen Klassen für eine XAML-Datei und deren CodeBehind verantwortlich sind. Dieses Verhalten ist nicht unbedingt XAML-Sprache angegeben; es ist die spezielle Implementierung, die Universelle Windows-Plattform (UWP)-Programmierung für XAML für die Verwendung von x:Name in ihren Programmier- und Anwendungsmodellen gilt.
Jeder definierte x:Name muss innerhalb eines XAML-NameScopes 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-NameScopes werden durch jede Steuerelementvorlage oder Datenvorlage definiert, die auf dieser Seite definiert ist. 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++-CodeBehind verweisen müssen, verwenden Sie andere APIs oder Struktur-Traversal. 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 UWP-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, aber 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 verwendet werden sollte, werte zu ändern, 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, die alle Elemente in einem ResourceDictionary muss über ein x:Key- oder x:Name-Attribut verfügen.) Dies ist üblich für Storyboardanimationen. Weitere Informationen finden Sie im Abschnitt " ResourceDictionary" und "XAML-Ressourcenverweise".