FrameworkElement.FindName(String) Methode
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.
Ruft ein Objekt ab, das den angegebenen Bezeichnernamen aufweist.
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
Das angeforderte Objekt. Dies kann null sein, wenn im aktuellen XAML-NameScope kein übereinstimmende Objekt gefunden wurde.
Hinweise
Important
Um die FindName Methode effektiv zu verwenden, sollten Sie das Konzept eines XAML-NameScopes verstehen und wissen, 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 FindName in Ihrem Windows-Runtime Code stammt aus dem generierten InitializeComponent Aufruf für eine XAML-Seite. In diesem Fall FindName wird erst nach dem Laden der XAML-Seite aufgerufen.
InitializeComponent stellt die Infrastruktur bereit, sodass auf jedes Objekt, das durch das Laden von XAML instanziiert wurde, bequem über Ihren 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 aufweist.
Eine Laufzeit-API, z FindName . B. 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 nicht zusammenhängend innerhalb dieser Objektstruktur. Das Ergebnis ist, dass es in der Objektstruktur möglicherweise ein benanntes Objekt gibt, das ein bestimmter FindName Bereich nicht finden kann. Die Diskontitä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 FindNameFolgendes zurückgeben, versuchen Sie folgendes:
- Wenn Sie benannte Objekte aus einer Vorlage definieren oder von einem Steuerelement ableiten, können Sie GetTemplateChild aus dem Bereich des Objekts aufrufen, auf das die Vorlage angewendet wird. Sie müssen sich in einem abgeleiteten Klassendefinitionsbereich befinden, um GetTemplateChild zu verwenden, da es sich um eine geschützte Methode von Control handelt.
- Wenn Sie sich nicht in einem abgeleiteten Klassendefinitionsbereich befinden, können Sie möglicherweise die visuelle Struktur einer Vorlage eingeben, indem Sie VisualTreeHelper an einem Punkt der Objektlebensdauer verwenden, nachdem die Vorlage angewendet wurde (behandeln Sie das Loaded-Ereignis ).
VisualTreeHelper verwendet eine metapher mit übergeordneten untergeordneten Elementen zum Durchlaufen der Struktur, anstatt das XAML-NameScope-Konzept zu verwenden. Das Gehen der Struktur erfordert in der Regel ein bestimmtes Wissen ü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
FindNamespeziell für den Vorlagenstamm auf Elemente zuzugreifen, die innerhalb der XAML-Vorlage benannt sind. - Für den Fall XamlReader.Load sollten Sie einen Verweis auf den Rückgabewert des XamlReader.Load-Aufrufs beibehalten, bei dem es sich um ein Objekt handelt, das zum Besitzer oder zur Grundlage des erstellten XAML-NameScopes wird, der relevant ist. Rufen Sie
FindNamedann stattdessen aus diesem Bereich auf.
Das von FindName diesem Objekt zurückgegebene Objekt ist nicht unbedingt ein FrameworkElement. Sie können z. B. einen Namen auf ein Animations-Storyboard anwenden, und die verschiedenen Animations-Storyboardtypen 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 die ursprüngliche Quell-XAML geladen wurde, aber diese Technik hat einige Einschränkungen (siehe Hinweise im Namen).
TextElement definiert einen ähnlichen FindName. Dies ermöglicht ein FindName Verhalten im Objektmodell, das nicht auf FrameworkElement beschränkt ist. Aufrufe von beiden Implementierungen FindName können in eine gemischte FrameworkElement -/Textelementobjektstruktur durchlaufen und einen allgemeinen 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 den handelnden XAML-NameScope auf dieser Ebene in der Objektstruktur aktualisiert. Wenn Sie ein neues FrameworkElement erstellen, geben Sie ihm einen Namen, und fügen Sie es dann der Objektstruktur hinzu, und durch Aufrufen FindName innerhalb dieses XAML-NameScopes kann das code erstellte Objekt gefunden und zurückgegeben werden.