Objektlebensdauer-Ereignisse

In diesem Thema werden die spezifischen WPF-Ereignisse beschrieben, die die Phasen einer Objektlebensdauer darstellen (Erstellung, Verwendung und Zerstörung).

Dieses Thema enthält folgende Abschnitte.

  • Vorbereitungsmaßnahmen
  • Objektlebensdauer-Ereignisse
  • Allgemeine Lebensdauerereignisse für Elemente
  • Anwendungsmodellelemente für Lebensdauerereignisse
  • Verwandte Abschnitte

Vorbereitungsmaßnahmen

In diesem Thema wird vorausgesetzt, dass Sie sich mit Abhängigkeitseigenschaften aus Sicht eines Consumers vorhandener Abhängigkeitseigenschaften in Windows Presentation Foundation (WPF)-Klassen auskennen und dass Sie das Thema Übersicht über Abhängigkeitseigenschaften gelesen haben. Um den Beispielen in diesem Thema folgen zu können, sollten Sie mit der Verwendung von Extensible Application Markup Language (XAML) (siehe Übersicht über XAML (WPF)) und dem Schreiben von WPF-Anwendungen vertraut sein.

Objektlebensdauer-Ereignisse

Alle Objekte in verwaltetem Code von Microsoft .NET Framework durchlaufen ähnliche Lebensphasen: Erstellung, Verwendung und Zerstörung. Viele Objekte weisen außerdem eine Abschlussphase auf, die Teil der Zerstörungsphase ist. WPF-Objekte, oder genauer gesagt: die visuellen Objekte, die WPF als Elemente identifiziert, weisen zudem eine Reihe von allgemeinen Objektlebensphasen auf. Die WPF-Programmierungs- und -Anwendungsmodelle stellen diese Phasen als eine Abfolge von Ereignissen dar. In WPF gibt es vier Objekttypen in Bezug auf Lebensdauerereignisse: allgemeine Elemente, Fensterelemente, Navigationshosts und Anwendungsobjekte. Fenster und Navigationshosts befinden sich auch innerhalb der größeren Gruppierung visueller Objekte (Elemente). In diesem Thema werden zunächst die Lebensdauerereignisse beschrieben, die allen Elementen gemeinsam sind. Anschließend wird eine Einführung in spezifischere Elemente gegeben, die sich auf Anwendungsdefinitionen, Fenster oder Navigationshosts beziehen.

Allgemeine Lebensdauerereignisse für Elemente

Jedes WPF-Frameworkebene-Element (Objekte, die sich von einem FrameworkElement oder einem FrameworkContentElement ableiten) hat drei allgemeine Lebensdauerereignisse: Initialized, Loaded und Unloaded.

Initialized

Initialized wird zuerst ausgelöst. Dies entspricht in etwa der Initialisierung des Objekts durch den Aufruf seines Konstruktors. Da das Ereignis in Reaktion auf die Initialisierung eintritt, ist sichergestellt, dass alle Eigenschaften des Objekts festgelegt werden. (Eine Ausnahme sind Ausdrucksverwendungen wie z. B. dynamische Ressourcen oder Bindungen; dies sind nicht ausgewertete Ausdrücke.) Als Folge der Anforderung, dass alle Eigenschaften festgelegt sein müssen, scheint die Sequenz von Initialized, die durch im Markup definierte geschachtelte Elemente ausgelöst wird, zunächst für die untersten Elemente in der Struktur und dann für die übergeordneten Elemente in Richtung Stammelement aufzutreten. Diese Reihenfolge wird eingehalten, da die Beziehungen zwischen übergeordneten und untergeordneten Elementen und die Kapselung Eigenschaften sind und daher das übergeordnete Element erst die Initialisierung berichten kann, wenn die untergeordneten Elemente, die die Eigenschaft ausfüllen, auch vollständig initialisiert werden.

Wenn Sie Handler in Reaktion auf das Initialized-Ereignis schreiben, müssen Sie berücksichtigen, dass es keine Garantie dafür gibt, dass alle anderen Elemente in der Elementstruktur (entweder logische Struktur oder visuelle Struktur), die sich in der Nähe des Handlers befinden, insbesondere übergeordnete Elemente, erstellt wurden. Membervariablen sind möglicherweise NULL, oder Datenquellen sind unter Umständen noch nicht durch die zugrunde liegende Bindung gefüllt (auch nicht auf Ausdrucksebene).

Loaded

Loaded wird als Nächstes ausgeführt. Das Loaded-Ereignis wird vor dem endgültigen Rendern, aber nach der Berechnung der nötigen Werte für das Rendern durch das Layoutsystem ausgelöst. Das Loaded-Ereignis führt dazu, dass die logische Struktur, in der sich ein Element befindet, vollständig ist und dass eine Verbindung zu einer Präsentationsquelle hergestellt wird, die das HWND und die Renderingoberfläche bereitstellt. Standarddatenbindungen (Bindungen zu lokalen Quellen, wie andere Eigenschaften oder direkt definierte Datenquellen) treten vor Loaded auf. Asynchrone Datenbindungen (externe oder dynamische Quellen) sind möglicherweise aufgetreten; dies kann jedoch aufgrund ihrer asynchronen Natur nicht garantiert werden.

Der Mechanismus, durch den das Loaded-Ereignis ausgelöst wird, ist anders als Initialized. Das Initialized-Ereignis wird elementweise ausgelöst, ohne eine direkte Koordination durch eine vollständige Elementstruktur. Im Gegensatz dazu wird das Loaded-Ereignis koordiniert über die gesamte Elementstruktur hinweg (insbesondere die logische Struktur) ausgelöst. Wenn alle Elemente in der Struktur einen geladenen Status aufweisen, wird das Loaded-Ereignis zunächst für das Stammelement ausgelöst. Das Loaded-Ereignis wird dann nacheinander für jedes untergeordnete Element ausgelöst.

HinweisHinweis

Dieses Verhalten ähnelt oberflächlich betrachtet dem Tunneln für ein Routingereignis.Allerdings werden keine Informationen von Ereignis zu Ereignis transportiert.Jedes Element hat immer die Möglichkeit, sein Loaded-Ereignis zu verarbeiten, und das Markieren von Ereignisdaten als verarbeitet wirkt sich nur auf dieses Element aus.

Unloaded

Unloaded wird als Letztes ausgelöst und entweder von der Präsentationsquelle oder dem visuellen übergeordneten Element initiiert, die bzw. das entfernt wird. Wenn Unloaded ausgelöst und verarbeitet wird, wurde die Festlegung des übergeordneten Elements der Ereignisquelle (wie durch die Parent-Eigenschaft festgelegt) oder anderer Elemente weiter oben in den logischen oder visuellen Strukturen unter Umständen bereits aufgehoben, was bedeutet, dass die Datenbindung, die Ressourcenverweise und Stile nicht auf die normalen oder letzten bekannten Laufzeitwerte festgelegt werden können.

Anwendungsmodellelemente für Lebensdauerereignisse

Aufbauend auf den allgemeinen Lebensdauerereignissen sind folgende Anwendungsmodellelemente vorhanden: Application, Window, Page, NavigationWindow und Frame. Diese erweitern die allgemeinen Lebensdauerereignisse um zusätzliche Ereignisse, die relevant für ihren spezifischen Zweck sind. Sie werden im Detail in folgenden Themen erläutert:

Siehe auch

Konzepte

Priorität von Abhängigkeitseigenschaftswerten

Übersicht über Routingereignisse