Obiekt okresu istnienia zdarzeń

W tym temacie opisano konkretne zdarzenia WPF, które oznaczają etapy w okresie istnienia obiektu tworzenia, używania i zniszczenia.

Wymagania wstępne

W tym temacie założono, że znasz właściwości zależności z perspektywy konsumenta istniejących właściwości zależności w klasach Windows Presentation Foundation (WPF) i zapoznaj się z tematem Właściwości zależności — omówienie . Aby postępować zgodnie z przykładami w tym temacie, należy również zrozumieć język XAML (zobacz XAML w WPF) i wiedzieć, jak pisać aplikacje WPF.

Obiekt okresu istnienia zdarzeń

Wszystkie obiekty w kodzie zarządzanym programu Microsoft .NET Framework przechodzą przez podobny zestaw etapów życia, tworzenia, używania i zniszczenia. Wiele obiektów ma również etap finalizacji życia, który występuje w ramach fazy zniszczenia. Obiekty WPF, w szczególności obiekty wizualne, które WPF identyfikuje jako elementy, mają również zestaw typowych etapów życia obiektu. Modele programowania i aplikacji WPF uwidaczniają te etapy jako serię zdarzeń. Istnieją cztery główne typy obiektów w WPF w odniesieniu do zdarzeń okresu istnienia; elementy ogólne, elementy okna, hosty nawigacji i obiekty aplikacji. Hosty systemu Windows i nawigacji znajdują się również w większej grupie obiektów wizualnych (elementów). W tym temacie opisano zdarzenia okresu istnienia wspólne dla wszystkich elementów, a następnie wprowadzono bardziej szczegółowe, które mają zastosowanie do definicji aplikacji, okien lub hostów nawigacji.

Typowe zdarzenia okresu istnienia dla elementów

Każdy element na poziomie struktury WPF (te obiekty pochodzące z klasy FrameworkElement lub ) ma trzy typowe zdarzenia okresu istnienia: Initialized, , Loadedi UnloadedFrameworkContentElement.

Initialized

Initialized jest wywoływany jako pierwszy, a w przybliżeniu odpowiada inicjowaniu obiektu przez wywołanie jego konstruktora. Ponieważ zdarzenie odbywa się w odpowiedzi na inicjowanie, masz gwarancję, że wszystkie właściwości obiektu są ustawione. (Wyjątek dotyczy użycia wyrażeń, takich jak zasoby dynamiczne lub powiązanie; będą to wyrażenia nieszacowane). W wyniku wymagania, że wszystkie właściwości są ustawione, sekwencja Initialized wywoływana przez zagnieżdżone elementy zdefiniowane w adiustacji wydaje się występować w kolejności najgłębszych elementów w drzewie elementów, a następnie elementów nadrzędnych w kierunku katalogu głównego. Ta kolejność jest taka, ponieważ relacje nadrzędno-podrzędne i zawieranie są właściwościami, dlatego element nadrzędny nie może zgłaszać inicjowania, dopóki elementy podrzędne, które wypełniają właściwość, również zostaną całkowicie zainicjowane.

Podczas pisania programów obsługi w odpowiedzi na Initialized zdarzenie należy wziąć pod uwagę, że nie ma gwarancji, że wszystkie inne elementy w drzewie elementów (drzewo logiczne lub drzewo wizualne) wokół miejsca utworzenia programu obsługi, szczególnie elementów nadrzędnych. Zmienne składowe mogą mieć wartość null lub źródła danych mogą nie zostać jeszcze wypełnione przez powiązanie bazowe (nawet na poziomie wyrażenia).

załadowano

Loaded zostanie podniesiona dalej. Zdarzenie Loaded jest wywoływane przed ostatecznym renderowaniem, ale po obliczeniu wszystkich niezbędnych wartości do renderowania przez system układu. Loaded oznacza, że drzewo logiczne, w ramach którego znajduje się element, jest kompletne, i łączy się ze źródłem prezentacji, które zapewnia HWND i powierzchni renderowania. Powiązanie danych standardowych (powiązanie z lokalnymi źródłami, takie jak inne właściwości lub bezpośrednio zdefiniowane źródła danych) miało miejsce przed Loaded. Mogło wystąpić powiązanie danych asynchronicznych (źródeł zewnętrznych lub dynamicznych), ale z definicji jej asynchronicznego charakteru nie można zagwarantować.

Mechanizm, za pomocą którego Loaded jest zgłaszane zdarzenie, różni się od Initialized. Zdarzenie Initialized jest wywoływane przez element bez bezpośredniej koordynacji przez ukończone drzewo elementów. Z kolei Loaded zdarzenie jest zgłaszane jako skoordynowany wysiłek w całym drzewie elementów (w szczególności drzewo logiczne). Gdy wszystkie elementy w drzewie są w stanie, w którym są uznawane za załadowane, Loaded zdarzenie jest najpierw wywoływane w elemecie głównym. Zdarzenie Loaded jest następnie wywoływane kolejno dla każdego elementu podrzędnego.

Uwaga

To zachowanie może pozornie przypominać tunelowanie dla zdarzenia kierowanego. Jednak żadne informacje nie są przenoszone ze zdarzenia do zdarzenia. Każdy element zawsze ma możliwość obsługi swojego Loaded zdarzenia i oznaczania danych zdarzenia, które są obsługiwane, nie ma wpływu poza ten element.

Zwolniono

Unloaded element jest zgłaszany jako ostatni i jest inicjowany przez źródło prezentacji lub element nadrzędny wizualizacji, który jest usuwany. Gdy Unloaded element jest wywoływany i obsługiwany, element, który jest elementem nadrzędnym źródła zdarzeń (określonym przez Parent właściwość) lub dowolnym elementem w górę w drzewach logicznych lub wizualnych, może już nie zostać ustawiony, co oznacza, że powiązanie danych, odwołania do zasobów i style mogą nie być ustawione na ich normalną lub ostatnią znaną wartość czasu wykonywania.

Elementy modelu aplikacji zdarzenia istnienia

W oparciu o typowe zdarzenia okresu istnienia dla elementów są następujące elementy modelu aplikacji: Application, , WindowPage, , NavigationWindowi Frame. Rozszerzają one typowe zdarzenia okresu istnienia z dodatkowymi zdarzeniami, które są istotne dla ich konkretnego celu. Zostały one szczegółowo omówione w następujących lokalizacjach:

Zobacz też