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.

FindName wird in Ihrem Windows-Runtime Code am häufigsten innerhalb des generierten InitializeComponent-Aufrufs für eine XAML-Seite verwendet. In diesem Fall wird FindName erst aufgerufen, nachdem die XAML-Seite geladen wurde. InitializeComponent stellt die Infrastruktur bereit, sodass auf jedes Objekt, das durch das Laden von XAML 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 verwendet.

Eine Laufzeit-API wie FindName arbeitet für eine 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 innerhalb dieser Objektstruktur nicht zusammenhängend. 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 FindName zurückgeben, probieren Sie die folgenden Techniken aus:

  • Für benannte Objekte, die aus einer Vorlage stammen, können Sie GetTemplateChild aus dem Bereich des Objekts aufrufen, in dem die Vorlage angewendet wird, wenn Sie ein Steuerelement definieren oder daraus ableiten. Sie müssen sich in einem Definitionsbereich einer 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 von über- und untergeordneten Elementen zum Durchlaufen der Struktur, anstatt das XAML-Namescope-Konzept zu verwenden. Das Durchlaufen der Struktur erfordert im Allgemeinen eine bestimmte Kenntnis der 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 FindName speziell für den Vorlagenstamm aufrufen, 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-Namensbereichs wird, der relevant ist. Rufen Sie dann stattdessen FindName 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 zugewiesen, indem ein Attribut für ein Objektelement im XAML-Markup angegeben wird. Sie können einen Name-Wert festlegen, nachdem das anfängliche Quell-XAML geladen wurde, aber dieses Verfahren weist einige Einschränkungen auf (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 eine der beiden Implementierungen von FindName können in eine gemischte FrameworkElement- /Textelementobjektstruktur durchlaufen und einen allgemeinen XAML-Namescope verwenden, damit ein FrameworkElement.FindName-Aufruf ein benanntes Textelement finden kann und umgekehrt.

Namenswerte , die zur Laufzeit in der Objektstruktur hinzugefügt oder geändert werden, werden auf dieser Ebene in der Objektstruktur in den handelnden XAML-Namescope aktualisiert. Anders ausgedrückt: Wenn Sie ein neues FrameworkElement erstellen, geben Sie ihm einen Namen, und fügen Sie es der Objektstruktur hinzu. Durch Aufrufen von FindName innerhalb dieses XAML-Namescopes kann das vom Code erstellte Objekt gefunden und zurückgegeben werden.

Gilt für:

Weitere Informationen