Freigeben über


FrameworkElement.FindName(String) Methode

Definition

Ruft ein Objekt ab, das über den angegebenen Bezeichnernamen verfügt.

public:
 virtual Platform::Object ^ FindName(Platform::String ^ name) = FindName;
IInspectable FindName(winrt::hstring const& name);
public object FindName(string name);
function findName(name)
Public Function FindName (name As String) As Object

Parameter

name
String

Platform::String

winrt::hstring

Der Name des angeforderten Objekts.

Gibt zurück

Object

Platform::Object

IInspectable

Das angeforderte Objekt. Dies kann NULL sein, wenn im aktuellen XAML-Namescope kein übereinstimmende Objekt gefunden wurde.

Hinweise

Wichtig

Um die FindName -Methode effektiv zu verwenden, sollten Sie das Konzept eines XAML-Namescopes verstehen und verstehen, wie ein XAML-Namescope zur XAML-Ladezeit erstellt und dann zur Laufzeit referenziert und möglicherweise geändert wird. Weitere Informationen finden Sie unter XAML-Namescopes.

Die häufigste Verwendung von FindName in Ihrem Windows-Runtime Code erfolgt innerhalb des generierten InitializeComponent Aufrufs für eine XAML-Seite. In dieser Situation wird erst aufgerufen, FindName nachdem die XAML-Seite geladen wurde. InitializeComponent stellt die Infrastruktur bereit, sodass auf jedes Objekt, das durch XAML-Laden instanziiert wurde, bequem von Ihrem Codebehind-Code zugegriffen werden kann. Anschließend können Sie auf die Objekte als Variable verweisen, die denselben Namen wie das markup deklarierte x:Name-Attribut hat.

Eine Laufzeit-API wie FindName arbeitet an einer Laufzeitobjektstruktur der App, wie sie im Arbeitsspeicher vorhanden ist. Wenn ein Teil dieser Objektstruktur aus Vorlagen oder laufzeitgeladenem XAML erstellt wird, ist ein XAML-Namescope in der Regel nicht zusammenhängend innerhalb dieser Objektstruktur. Das Ergebnis ist, dass in der Objektstruktur möglicherweise ein benanntes Objekt vorhanden ist, das ein bestimmter FindName Bereich nicht finden kann. Die Diskontinuitäten zwischen XAML-Namescopes, die in typischen Anwendungsszenarien auftreten können, sind, wenn Objekte durch Anwenden einer Vorlage erstellt werden oder wenn Objekte durch einen Aufruf von XamlReader.Load erstellt und anschließend der Objektstruktur hinzugefügt werden.

Wenn Sie ein unerwartetes NULL-Ergebnis für FindNamezurückgeben, führen Sie die folgenden Techniken aus:

  • Bei benannten Objekten, die aus einer Vorlage stammen, können Sie GetTemplateChild aus dem Bereich des Objekts aufrufen, in dem die Vorlage angewendet wird. Sie müssen sich in einem Definitionsbereich der abgeleiteten Klasse befinden, um GetTemplateChild verwenden zu können, da es sich um eine geschützte Methode von Control handelt.
  • Wenn Sie sich nicht in einem Definitionsbereich für abgeleitete Klassen befinden, können Sie möglicherweise die visuelle Struktur einer Vorlage eingeben, indem Sie VisualTreeHelper zu einem Zeitpunkt der Objektlebensdauer verwenden, nachdem die Vorlage angewendet wurde (behandeln Sie das Loaded-Ereignis ). VisualTreeHelper verwendet eine metapher über-untergeordnete Seite, um die Struktur zu durchlaufen, anstatt das XAML-Namescope-Konzept zu verwenden. Das Durchlaufen der Struktur erfordert in der Regel bestimmte Kenntnisse über die Zusammensetzung des Steuerelements, da es aus einer bestimmten Vorlage stammt. Sie können VisualTreeHelper.GetChild für das Steuerelement verwenden, um den angewendeten Vorlagenstamm des Steuerelements abzurufen, und sie können speziell für den Vorlagenstamm aufrufen FindName , um auf Elemente zuzugreifen, die innerhalb des Vorlagen-XAML benannt sind.
  • Für den XamlReader.Load-Fall sollten Sie einen Verweis auf den Rückgabewert des XamlReader.Load-Aufrufs beibehalten, bei dem es sich um ein Objekt handelt, das der Besitzer oder die Grundlage des erstellten XAML-Namensskops wird, das relevant ist. Rufen Sie FindName dann stattdessen aus diesem Bereich auf.

Das von FindName zurückgegebene Objekt ist nicht unbedingt ein FrameworkElement. Beispielsweise können Sie einen Namen auf ein Animations-Storyboard anwenden, und die verschiedenen Animations-Storyboard-Typen werden nicht von FrameworkElement abgeleitet.

Die Name-Eigenschaft für ein Objekt (oder das ähnliche x:Name-Attribut) wird durch Angeben eines Attributs für ein Objektelement im XAML-Markup zugewiesen. Sie können einen Name-Wert festlegen, nachdem die anfängliche Quell-XAML geladen wurde, aber dieses Verfahren hat einige Einschränkungen (siehe Hinweise in Name).

TextElement definiert einen ähnlichen FindName. Dadurch wird ein FindName Verhalten im Objektmodell aktiviert, das nicht auf FrameworkElement beschränkt ist. Aufrufe durch beide Implementierungen von FindName können in eine gemischte FrameworkElement- /Textelementobjektstruktur durchlaufen und ein allgemeines XAML-Namescope verwenden, sodass ein FrameworkElement.FindName Aufruf ein benanntes Textelement finden kann und umgekehrt.

Namenwerte , die zur Laufzeit in der Objektstruktur hinzugefügt oder geändert werden, werden in das handelnde XAML-Namescope auf dieser Ebene in der Objektstruktur aktualisiert. Anders ausgedrückt: Wenn Sie ein neues FrameworkElement erstellen, geben Sie ihm einen Namen, und fügen Sie es der Objektstruktur hinzu. Aufrufen FindName innerhalb dieses XAML-Namensskops können das code erstellte Objekt finden und zurückgeben.

Gilt für:

Weitere Informationen