FrameworkElement.FindName Method

Ruft ein Objekt ab, das den angegebenen Bezeichnernamen aufweist.

Syntax


public object FindName(
  string name
)

Parameter

name

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

Der Name des angeforderten Objekts.

Rückgabewert

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

Das angeforderte Objekt. Dieser Wert kann NULL sein, wenn kein entsprechendes Objekt im aktuellen XAML-Namescope gefunden wurde.

Hinweise

Wichtig  Um die FindName-Methode effektiv verwenden zu können, sollte Ihnen das Konzept von XAML-Namescopes bekannt sein. Außerdem müssen Sie wissen, wie ein XAML-Namescope zur XAML-Ladezeit erstellt und zur Laufzeit möglicherweise geändert wird. Weitere Informationen finden Sie unter XAML-Namescopes.

Die häufigste Verwendung von FindName im Windows Runtime-Code ist der Aufruf eine XAML-Seite aus dem generierten InitializeComponent heraus. In dieser Situation wird FindName nur aufgerufen, nachdem die XAML-Seite geladen ist. InitializeComponent stellt die Infrastruktur bereit, so dass auf jedes durch XAML instanziierte Objekt einfach durch CodeBehind-Code zugegriffen werden kann. Sie können auf die Objekte als Variable verweisen, die den gleichen Namen wie das vom Markup deklarierte x:Name-Attribut haben.

Eine Laufzeit-API wie FindName arbeitet mit der vorhandenen Laufzeitobjektstruktur der App im Arbeitsspeicher. Wenn ein Teil dieser Objektstruktur aus Vorlagen oder aus zur Laufzeit geladener XAML erstellt wird, hängt ein XAML-Namensbereich in der Regel nicht innerhalb dieser Objektstruktur zusammen. Dies führt dazu, dass die Objektstruktur ein benanntes Objekt enthalten könnte, das ein angegebener FindName-Bereich nicht finden kann. Diskontinuitäten zwischen XAML-Namescopes, die in typischen Anwendungsszenarios auftreten könnten, sind zum Beispiel Fälle, in denen Objekte durch Anwenden einer Vorlage erstellt werden oder wenn Objekte durch einen Aufruf von XamlReader.Load erstellt und anschließend der Hauptobjektstruktur hinzugefügt werden.

Wenn für FindName ein unerwartetes NULL-Ergebnis zurückgegeben wird, versuchen Sie es mit diesen Methoden:

  • Für benannte Objekte, die aus einer Vorlage erstellt werden, wenn Sie die Ableitung definiert sind, oder von einem Steuerelement, können Sie GetTemplateChild vom Gültigkeitsbereich des Objekts aufrufen, in dem die Vorlage angewendet wird. Sie müssen sich in einem abgeleiteten Klassendefinitionsbereich befinden, um GetTemplateChild verwenden zu können, da es eine geschützte Methode von Control ist.
  • Wenn Sie sich nicht im Definitionsbereich einer abgeleiteten Klasse befinden, können Sie möglicherweise die visuelle Struktur einer Vorlage eingeben, indem Sie VisualTreeHelper an einem Punkt in der Objektlebensdauer verwenden, nachdem die Vorlage angewendet wurde (behandeln Sie das Loaded-Ereignis). VisualTreeHelper verwendet jedoch eine Metapher zwischen übergeordneten und untergeordneten Daten zum Durchlaufen der Struktur und nicht das XAML-Namescope-Konzept. Zum Durchlaufen der Struktur sind in der Regel spezifische Kenntnisse über die aus einer bestimmten Vorlage stammende Zusammensetzung des Steuerelements erforderlich. Sie können die VisualTreeHelper.GetChild-Klasse des Steuerelements verwenden, um den angewendeten Vorlagenstamm des Steuerelements abzurufen und speziell die FindName-Methode des Vorlagenstamms aufzurufen, um auf Elemente zuzugreifen, die innerhalb der XAML-Vorlage benannt werden.
  • Sie sollten im Fall XamlReader.Load einen Verweis auf den Rückgabewert des XamlReader.Load-Aufrufs beibehalten. Dabei handelt es sich um ein Objekt, das zum Besitzer oder zur Basis des erstellten relevanten XAML-Namescopes wird. Rufen Sie dann stattdessen FindName aus diesem Bereich auf.

Das von FindName zurückgegebene Objekt ist nicht zwangsläufig ein FrameworkElement. Beispielsweise können Sie einen Namen auf ein Animationsstoryboard anwenden, und die verschiedenen Animationsstoryboardtypen werden nicht von FrameworkElement abgeleitet.

Die Name-Eigenschaft für ein Objekt (oder das ähnliche x:Name-Attribut)wird zugewiesen, indem ein Attribut eines Objektelements in XAML-Markup angegeben wird. Sie können einen Name-Wert festlegen, nachdem das ursprüngliche Quell-XAML geladen wurde, jedoch hat diese Technik einige Einschränkungen (siehe Hinweise in der Name-Eigenschaft).

TextElement definiert ein ähnliches FindName. Dadurch wird ein FindName-Verhalten im Objektmodell aktiviert, das nicht auf FrameworkElement beschränkt ist. Aufrufe mit einer der Implementierungen von FindName können eine gemischte FrameworkElement-/Textelement-Objektstruktur durchlaufen und einen gemeinsamen XAML-Namescope verwenden, sodass mit einem FrameworkElement.FindName-Aufruf ein benanntes Textelement gesucht werden kann (und umgekehrt).

Name-Werte, die zur Laufzeit in der Objektstruktur hinzugefügt oder geändert werden, werden im aktiven XAML-Namescope auf dieser Ebene in der Objektstruktur aktualisiert. Mit anderen Worten; Wenn Sie ein neues FrameworkElement erstellen, weisen Sie ihm einen Name zu und fügen es dann der Objektstruktur hinzu. Der Aufruf von FindName für diesem XAML-Namensbereich findet das vom Code erstellte Objekt und gibt es zurück.

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
Name
XAML-Namescopes
x:Name

 

 

Anzeigen:
© 2015 Microsoft