FrameworkElement.Name Eigenschaft
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Dient zum Abrufen oder Festlegen des identifizierenden Namens des Objekts. Wenn ein XAML-Prozessor die Objektstruktur aus XAML-Markup erstellt, kann Laufzeitcode anhand dieses Namens auf das xaml-deklarierte Objekt verweisen.
public:
property Platform::String ^ Name { Platform::String ^ get(); void set(Platform::String ^ value); };
winrt::hstring Name();
void Name(winrt::hstring value);
public string Name { get; set; }
var string = frameworkElement.name;
frameworkElement.name = string;
Public Property Name As String
<frameworkElement Name="xamlNameString"/>
Eigenschaftswert
Der Name des Objekts, bei dem es sich um eine Zeichenfolge handeln muss, die in der XamlName-Grammatik gültig ist (siehe Tabelle in x:Name-Attributreferenz ). Der Standardwert ist eine leere Zeichenfolge.
Beispiele
In diesem Beispiel wird ein Wert für Name ein vorhandenes Objekt abgerufen und dieser Name verwendet, um eine Animation neu zuzuweisen. Sie zielen auf eine Animation ab, indem Sie die angefügte Storyboard.TargetName-Eigenschaft festlegen.
private void Start_Animation(object sender, PointerRoutedEventArgs e)
{
// If the Storyboard is running and you try to change
// properties of its animation objects programmatically,
// an error will occur.
myStoryboard.Stop();
// Get a reference to the rectangle that was clicked.
Rectangle myRect = (Rectangle)sender;
// Change the TargetName of the animation to the name of the
// rectangle that was clicked.
myDoubleAnimation.SetValue(Storyboard.TargetNameProperty, myRect.Name);
// Begin the animation.
myStoryboard.Begin();
}
Hinweise
Die häufigste Verwendung dieser Eigenschaft besteht darin, das x:Name-Attribut für ein Objekt im XAML-Markup anzugeben oder diesen Wert zu lesen, wie er im Markup festgelegt wurde. In den meisten Punkten sind das x:Name Attribut und die Name Eigenschaft gleichwertig. Bei jedem einzelnen Element schließen sich das x:Name Attribut und die Name Eigenschaft gegenseitig als XAML-Attribute aus. Wenn Sie versuchen, sowohl dasselbe x:NameName Objektelement im Markup festzulegen, wird ein Parserfehler ausgelöst.
Wenn Sie die standardmäßigen Seitenbuildaktionen für XAML verwenden, werden alle XAML-Elemente, die über ein x:Name-Attribut verfügen, oder Name Feldverweise generiert, die beim Laden des XAML-Codes schließlich aufgefüllt InitializeComponent werden. Die Feldverweise ermöglichen ein Programmiermodell, auf das Objekte direkt anhand des Namens in Ihrem seitenspezifischen CodeBehind verwiesen werden können, sobald die XAML-Objektstruktur in eine Seite oder App geladen wird.
Namen müssen in einem XAML-NameScope eindeutig sein. Im Allgemeinen wird der XAML-NameScope von der XAML-Seite definiert, aber bestimmte Features wie Vorlagen oder Aufrufe an API wie XamlReader.Load können separate XAML-NameScopes definieren. Weitere Informationen finden Sie unter XAML-NameScopes.
Name sollte niemals lokalisiert werden.
Name wird als Feldnamenvariable in CodeBehind verwendet. Auf diesen Code kann in der Regel nicht auf den Lokalisierer zugegriffen werden, der andernfalls Zugriff auf XAML-Dateien hat, die die Benutzeroberfläche definieren. Dies hängt jedoch von Ihrem Bereitstellungsmodell und den Lokalisierungsverfahren ab. Dies ist ein Grund, warum Sie keine Zeichenfolgen anzeigen sollten, die aus dem Namen in der App-UI stammen.
Szenarien für Name
Das Festlegen x:Name oder Name im XAML-Code, der UI-Elemente definiert, unterstützt mehrere Hauptszenarien:
-
Animationsadressierung Um eine Animation auf eine Objekteigenschaft anzuwenden, müssen Sie auf eine bestimmte Instanz abzielen. Dazu legen Sie die angefügte Storyboard.TargetName-Eigenschaft auf einer beliebigen Zeitachse fest. Der hier festgelegte Wert ist die Zeichenfolge, die Sie als oder
Name.x:NameWeitere Informationen finden Sie unter Storyboardanimationen. -
Teile einer Steuerelementvorlage Um das Visuelle Zustandsmodell und die Steuerelementinitialisierung zu unterstützen, sollten Steuerelementautoren Werte für die wichtigsten Teile eines vorlagenbasierten Steuerelements angeben
Name. Weitere Informationen finden Sie unter XAML-Steuerelementvorlagen. -
Allgemeine Laufzeitinteraktion Code in einem Ereignishandler kann z. B. ein Ereignis für ein Objekt behandeln, das die Änderungsbenutzeroberfläche bereitstellt, die Änderung der Eigenschaften tritt jedoch auf einem anderen in der Nähe befindlichen UI-Element auf. Die einfachste Möglichkeit zum Schreiben von Code für diese Situation besteht darin, den aus einem .
Name
Findname
Die Hilfsmethode FindName, die in jedem FrameworkElement verfügbar ist, kann Objekte anhand des Namens in der Objektstruktur suchen, solange sie sich im aktuellen XAML-NameScope befinden.
FindName durchsucht die XAML-erstellte Objektstruktur vollständig.
FindName Technisch gesehen ist die Suche der XAML-NameScope, der die Strukturmetapher nicht bewahrt und stattdessen als Hashtabelle mit Namen dargestellt wird.
FindName Namen, die in angewendeten Vorlagen definiert sind, können nicht gefunden werden. Um Elemente in angewendeten Vorlagen zu finden, verwenden Sie VisualTreeHelper.GetChild , um das angewendete Vorlagenstammobjekt abzurufen. Anschließend können Sie dieses Stammobjekt aufrufen FindName , und Sie durchsuchen den XAML-NameScope der Vorlage anstelle der größeren Seite.
Name und Datenbindung
Sie können den Zeichenfolgenwert Name nicht als direkten Quellwert für eine Datenquelle verwenden. Wenn Sie den gleichen Zeichenfolgenwert wie Name in der Benutzeroberfläche mit Bindung anzeigen müssen, sollten Sie denselben Wert in die Tag-Eigenschaft replizieren, die als Eigenschaftsbindungsquelle verwendet werden kann. Verwenden Name Sie auch nicht als Bindungsziel.
Der Wert oder x:NameName ist der Bezeichner, den Sie zum Identifizieren des Quellelements für eine ElementName-Bindung verwenden. Weitere Informationen finden Sie unter "Datenbindung" im Detail.
Festlegen des Namens im Code
Sie können den Wert Name für ein Objekt zur Laufzeit festlegen, aber es gibt einige wichtige Überlegungen und Einschränkungen, die Sie beachten sollten.
Das Ändern des Werts in Name Code zur Laufzeit, wenn das Objekt einen vorherigen Name Wert in XAML festgelegt hat, wird im Allgemeinen nicht empfohlen. Dies liegt daran, dass das Festlegen eines Namens nach dem Laden der Objektstruktur nicht den identifizierenden Namen des entsprechenden Feldverweises erstellt oder geändert. Wenn bereits ein Feldverweis vorhanden ist, da x:Name im anfänglichen Markup angegeben wird, und Sie den Wert des NameFelds ändern, sind das Feld und der Name, den Sie zum Suchen des Objekts über FindName verwenden müssen, jetzt unterschiedlich, da das Feld als markupdefinierter Name verbleibt.
Das Festlegen eines Name Werts für ein Objekt, das im Code erstellt wurde und daher nie einen XAML-definierten Name-Wert aufweist, ist für bestimmte Szenarien geeignet. Ein solches Szenario ist, wenn Sie mithilfe von FindName als allgemeine Hilfsfunktion entweder von XAML erstellte oder codegeschützte Objekte in der Struktur finden möchten. Damit dieses Szenario funktioniert, wird die Windows-Runtime weiterhin verwendet und zur XAML-NameScope-Hashtabellendarstellung zur Laufzeit hinzugefügt. Wenn Sie versuchen, einer vorhandenen weitgehend XAML-erstellten Objektstruktur neue benannte Objekte hinzuzufügen, müssen Namen eindeutig sein, andernfalls tritt eine Ausnahme mit doppelten Namen auf. Die Ausnahme des doppelten Namens tritt möglicherweise nicht auf, wenn versucht wird, den Namen festzulegen Name. Bis Sie versuchen, das duplizierte benannte Objekt der Hauptobjektstruktur hinzuzufügen, verfügt das neue Objekt über einen eigenen eigenständigen XAML-NameScope. Es liegt nur im Moment vor, dass Sie das Objekt mit einer größeren Objektstruktur verbinden, die die Bedingung für doppelten Namen erkannt werden kann. Oder die Ausnahme kann für den Vorgang auftreten, der Objekte in der Struktur verbunden hat, z. B. bei einem Aufruf der Add Methode einer Auflistung, die eine Verbindung mit der Hauptobjektstruktur herstellt.
Es kann schwierig sein zu wissen, welche Namenswerte bereits im XAML-NameScope vorhanden sind, dem Sie das neue Objekt später hinzufügen werden. Es gibt keine spezifische API, die die vollständige Hashtable vorhandener Namen in einem XAML-NameScope meldet. Wenn Sie Name-Werte im Code umfassend festlegen, benötigen Sie möglicherweise eine Technik zum Generieren von Namenzeichenfolgen, die für die Laufzeitnutzung eindeutig sind, oder Sie müssen Aufrufe umschließen, die in einem Try-Catch-Block neu benannte Objekte hinzufügen, um die Ausnahmen abzufangen, die aus einem doppelten Namen resultieren könnten. Alternativ können Sie der Implementierung, die die von XAML generierten Namenswerte liest, Einen eigenen Code InitializeComponent hinzufügen.
Beachten Sie, dass Sie zur Laufzeit nur für Objekte festlegen Name können, die ein FrameworkElement oder eine Inline sind. Wenn ein Objekt nicht über eine Name Eigenschaft verfügt und das Festlegen des Namens in XAML das x:Name Attribut anstelle des NameAttributs benötigt hätte, steht keine Laufzeit-API zum Festlegen des Laufzeitnamens eines solchen Objekts zur Verfügung.