FrameworkElement.Name Property

Ruft den identifizierenden Namen des Objekts ab oder legt diesen fest. Wenn ein XAML-Prozessor die Objektstruktur aus XAML-Markup erstellt, kann Laufzeitcode anhand dieses Namens auf das in XAML deklarierte Objekt verweisen.

Syntax


public string Name { get; set; }


<frameworkElement Name="xamlNameString"/>

Eigenschaftswert

Typ: System.String [.NET] | Platform::String [C++]

Der Name des Objekts. Dieser muss eine Zeichenfolge sein, die in der XamlName-Grammatik gültig ist (s. Tabelle in der x:Name-Referenz). Der Standard ist eine leere Zeichenfolge.

Hinweise

Die häufigste Verwendung dieser Eigenschaft ist das Angeben des x:Name-Attributs für ein Objekt in XAML-Markup, oder diesen Wert so zu lesen, wie er im Markup festgelegt wurde. Das x:Name-Attribut und die Name-Eigenschaft sind in fast jeder Hinsicht äquivalent. Für jedes einzelne Element schließen sich das x:Name-Attribut und die Name-Eigenschaft als XAML-Attribute gegenseitig aus. Wenn Sie versuchen, im Markup sowohl x:Name als auch Name für dasselbe Objekt festzulegen, wird ein Parserfehler ausgelöst.

Wenn Sie die standardmäßigen Page-Buildvorgänge für XAML verwenden, generiert jedes XAML-Element, das über x:Name oder Name verfügt, Feldverweise, die schließlich durch InitializeComponent aufgefüllt werden, wenn XAML geladen wird. Die Feldverweise ermöglichen ein Programmiermodell, wodurch Objekte direkt nach Namen in das seitenspezifisches Code-Behind verwiesen werden können, sobald die XAML-Objektstruktur auf eine Seite oder in eine App geladen wird.

Namen müssen in einem XAML-Namescope eindeutig sein. Im Allgemeinen wird der XAML-Namescope durch die XAML-Seite definiert. Bestimmte Funktionen, z. B. Vorlagen oder Aufrufe von APIs, beispielsweise XamlReader.Load, können eigene XAML-Namescopes definieren. Weitere Informationen finden Sie unter XAML-Namescopes.

Name sollte nie lokalisiert werden. Name wird als Feldnamenvariable in CodeBehind verwendet. Solcher Code steht dem Lokalisierer, der ggf. auf andere XAML-Dateien Zugriff hat, die die Benutzeroberfläche definieren, in der Regel nicht zur Verfügung, obwohl dies vom Bereitstellungsmodell und den Lokalisierungsverfahren abhängt. Dies ist ein Grund, warum keine Zeichenfolgen angezeigt werden sollten, die von der Name-Eigenschaft in der App-Benutzeroberfläche stammen.

Szenarien für Name

Beim Festlegen von x:Name oder Name in der XAML, die UI-Elemente definiert, werden mehrere Hauptszenarien unterstützt:

  • Animationsziele: Um eine Animation auf eine Objekteigenschaft anzuwenden, müssen Sie eine bestimmte Instanz als Ziel angeben. Legen Sie hierzu die angefügte Storyboard.TargetName-Eigenschaft für alle Timeline-Klassen fest. Der Wert, den Sie hier festgelegt haben, ist die Zeichenfolge, die Sie als x:Name oder Name zugewiesen haben. Weitere Informationen finden Sie unter Storyboard-Animationen.
  • Teile einer Steuerelementvorlage Um das visuelle Zustandsmodell und die Steuerelementinitialisierung zu unterstützen, sollten Steuerelementautoren Name-Werte für die Hauptteile eines vorlagenbasierten Steuerelements angeben. Weitere Informationen finden Sie unter Schnellstart: Steuerelementvorlagen.
  • Allgemeine Laufzeitinteraktion: Code innerhalb eines Ereignishandlers kann z. B. ein Ereignis eines Objekts behandeln, das die Änderungsbenutzeroberfläche zur Verfügung stellt, aber die Änderungen an den Eigenschaften treten in einem anderen nahegelegenen Benutzeroberflächenelement auf. Die einfachste Möglichkeit, Code für diese Situation zu schreiben, ist, den von einem Name generierten Feldverweis zu verwenden.

FindName

Die FindName-Hilfsmethode, die von jedem FrameworkElement abrufbar ist, kann in der Objektstruktur Objekte nach Namen suchen, solange sie im aktuellen XAML-Namensbereich enthalten sind. FindName durchsucht die von XAML erstellte Objektstruktur komplett. Technisch gesehen sucht FindName tatsächlich nach dem XAML-Namescope, der die Strukturmetapher nicht beibehält und stattdessen als Hashtabelle mit Namen darstellt. FindName kann Namen finden, die in angewendeten Vorlagen definiert sind. Um Elemente in den übernommenen Vorlagen zu suchen, verwenden Sie VisualTreeHelper.GetChild, um das übernommene Vorlagenstammobjekt abzurufen. Anschließend können Sie FindName auf diesem Stammobjekt aufrufen und suchen den XAML-Namensbereich der Vorlage anstelle der größeren Seite.

Name und Datenbindung

Sie können den Zeichenfolgenwert der Name-Eigenschaft nicht als direkten Quellwert für eine Datenbindungsquelle verwenden. Wenn derselbe Zeichenfolgenwert wie Name auf der Benutzeroberfläche mit Bindung angezeigt werden muss, sollten Sie den gleichen Wert in die Tag-Eigenschaft replizieren, die als Eigenschaftenbindungsquelle verwendet werden kann. Zudem darf Name nicht als Bindungsziel verwendet werden.

Der Wert von x:Name oder Name ist der Bezeichner, mit dem Sie das Quellelement für eine ElementName-Bindung identifizieren. Weitere Informationen finden Sie unter Datenbindung.

Festlegen des Namens im Code

Sie können den Wert der Name-Eigenschaft für ein Objekt zur Laufzeit festlegen, aber es gibt einige wichtige Überlegungen und Einschränkungen, die Sie beachten müssen.

Im Allgemeinen wird es nicht empfohlen, den Wert von Name zur Laufzeit im Code zu ändern, wenn für das Objekt zuvor der Wert Name in XAML festgelegt wurde. Dies liegt daran, dass durch das Festlegen eines Namens nach dem Laden der Objektstruktur der identifizierende Name des entsprechenden Feldverweises nicht erstellt oder geändert wird. Wenn ein Feldverweis bereits vorhanden ist, da ein x:Name im ursprünglichen Markup bereitgestellt wird, und Sie ändern dann den Wert von Name, sind das Feld und der Name, die Sie für die Suche des Objekts mit FindName benötigen, jetzt anders, da das Feld als der Markup-definierte Name bleibt.

Das Festlegen eines Name-Werts für ein Objekt, das in Code erstellt wurde und daher nie einen XAML definierte Name-Wert hatte, ist für bestimmte Szenarien geeignet. Ein solches Szenario liegt z. B. vor, wenn Sie mit XAML erstellte oder im Code erstellte Objekte in der Struktur mit FindName als gemeinsamer Hilfsfunktion suchen möchten. Um dieses Szenario auszuführen, verwendet die Windows-Runtime weiterhin zur Laufzeit die Darstellung für die Hashtabelle des XAML-Namensbereichs. Wenn Sie neu benannte Objekte zu einer vorhandenen Objektstruktur, die größtenteils mithilfe von XAML erstellt wurde, hinzufügen möchten, dann müssen die Namen eindeutig sein. Andernfalls tritt die Ausnahme des doppelten Namens auf. Die doppelte Namensausnahme tritt möglicherweise bei dem Versuch Name festzulegen, nicht auf. Solange Sie nicht versuchen, der Hauptobjektstruktur das doppelt benannte Objekt hinzuzufügen, verfügt das neue Objekt über einen in sich geschlossenen XAML-Namescope. Doppelte Namen können nur in dem Moment entdeckt werden, in dem Sie das Objekt mit einer größeren Objektstruktur verbinden. Oder die Ausnahme kann bei dem Vorgang auftreten, der Objekte in der Struktur verbindet, z. B. bei einem Aufruf der Add-Methode einer Auflistung, die eine Verbindung mit der Hauptobjektstruktur herstellt.

Es ist möglicherweise schwierig zu ermitteln, welche Name-Werte bereits in dem XAML-Namescope vorhanden sind, der später zum neuen Objekt hinzugefügt werden soll. Es gibt keine besondere API, die die vollständige Hashtabelle der in einem XAML-Namescope vorhandenen Namen meldet. Wenn Sie im großen Rahmen Name-Werte im Code festlegen, benötigen Sie möglicherweise ein Verfahren zum Generieren von Namenszeichenfolgen, die für Ihre Laufzeitverwendung eindeutig sind. Andernfalls müssen Sie die Aufrufe umschließen, die neu benannte Objekte in einen Try/Catch-Datenblock hinzufügen. Dadurch können Sie die durch einen doppelten Namen hervorgerufenen Ausnahmen abfangen. Oder Sie fügen Ihren eigenen Code der InitializeComponent-Implementierung hinzu, um die durch XAML generierten Namenswerte zu lesen.

Beachten Sie, dass Sie Name nur zur Laufzeit für Objekte festlegen können, die ein FrameworkElement oder ein Inline sind. Wenn ein Objekt nicht über eine Name-Eigenschaft verfügt und das Festlegen des Namens in XAML würde die Verwendung des x:Name-Attributs statt des Name-Attributs erfordern, dann steht für das Festlegen des Laufzeitnamens eines solchen Objekts keine Laufzeit-API zur Verfügung.

Beispiele

In diesem Beispiel wird aus einem vorhandenen Objekt ein Wert für Name abgerufen und dieser Namen zur Neuzuweisung einer Animation verwendet. Legen Sie die angefügte Storyboard.TargetName-Eigenschaft fest, um eine Animation als Ziel zu verwenden.


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();
}


Anforderungen

Mindestens unterstützter Client

Windows 8

Mindestens unterstützter Server

Windows Server 2012

Namespace

Windows.UI.Xaml
Windows::UI::Xaml [C++]

Metadaten

Windows.winmd

Siehe auch

FrameworkElement
x:Name
FindName
Storyboard.TargetName
XAML-Namescopes
XAML-Übersicht

 

 

Anzeigen:
© 2014 Microsoft