Sdílet prostřednictvím


Události životnosti objektu

Toto téma popisuje konkrétní události WPF, které označují fáze životnosti objektu vytvoření, použití a zničení.

Požadavky

V tomto tématu se předpokládá, že rozumíte vlastnostem závislosti z pohledu uživatele existujících vlastností závislosti ve třídách Windows Presentation Foundation (WPF) a přečetli jste si téma Přehled vlastností závislosti. Abyste mohli postupovat podle příkladů v tomto tématu, měli byste také pochopit XAML (viz XAML ve WPF) a vědět, jak psát aplikace WPF.

Události životnosti objektu

Všechny objekty ve spravovaném kódu microsoft .NET Framework procházejí podobnou sadou fází života, vytváření, používání a zničení. Mnoho objektů má také fázi dokončení života, která se vyskytuje jako součást fáze zničení. Objekty WPF, konkrétně vizuální objekty, které WPF identifikuje jako prvky, mají také sadu běžných fází života objektu. Programovací a aplikační modely WPF zpřístupňují tyto fáze jako řadu událostí. Ve WPF jsou čtyři hlavní typy objektů vzhledem k událostem životního cyklu; elementy obecně, prvky oken, hostitelé navigace a objekty aplikace. Hostitelé oken a navigace jsou také součástí většího seskupení vizuálních prvků (objektů). Toto téma popisuje události životnosti, které jsou společné pro všechny prvky, a pak zavádí konkrétnější události, které platí pro definice aplikací, okna nebo hostitele navigace.

Běžné události životnosti elementů

Každý prvek na úrovni architektury WPF (tyto objekty odvozené z FrameworkElement nebo FrameworkContentElement) má tři běžné události životnosti: Initialized, Loadeda Unloaded.

Inicializovaný

Initialized je vyvolána nejprve a přibližně odpovídá inicializaci objektu voláním jeho konstruktoru. Vzhledem k tomu, že událost probíhá v reakci na inicializaci, je zaručeno, že jsou nastaveny všechny vlastnosti objektu. (Výjimkou je použití výrazů, jako jsou dynamické prostředky nebo vazba; tyto výrazy budou nevyhodnocené.) V důsledku požadavku, že jsou nastaveny všechny vlastnosti, se pořadí událostí Initialized, které jsou způsobeny vnořenými elementy definovanými v zápisu, zdá probíhat tak, že nejhlubší prvky ve stromu elementů jsou zpracovány nejdříve, následovány nadřazenými prvky směrem ke kořenu. Toto pořadí je způsobeno tím, že vztahy rodič-potomek a jejich začlenění jsou vlastnostmi, a proto rodičovský objekt nemůže nahlásit inicializaci, dokud nejsou podřízené prvky, které tuto vlastnost vyplňují, také zcela inicializovány.

Při psaní obslužných rutin v reakci na událost Initialized je nutné vzít v úvahu, že neexistuje žádná záruka, že všechny ostatní prvky v hierarchii elementů (logický strom nebo vizuální strom) kolem místa, kde je obslužná rutina připojena, byly vytvořeny, zejména nadřazené prvky. Členské proměnné můžou mít hodnotu null nebo zdroje dat ještě nemusí být vyplněny podkladovou vazbou (i na úrovni výrazu).

Naložený

Loaded je vznesen následující. Událost Loaded se vyvolá před konečným vykreslováním, ale poté, co systém rozložení vypočítal všechny potřebné hodnoty pro vykreslení. Loaded zahrnuje, že logický strom, který je součástí prvku, je kompletní a připojuje se ke zdroji prezentace, který poskytuje HWND a vykreslovací plochu. Před Loadeddošlo ke standardní datové vazbě (vazba na místní zdroje, například jiné vlastnosti nebo přímo definované zdroje dat). Mohlo dojít k asynchronní datové vazbě (externí nebo dynamické zdroje), ale definicí její asynchronní povahy nelze zaručit, že k tomu došlo.

Mechanismus, kterým je vyvolána událost Loaded, se liší od Initialized. Událost Initialized je vyvolána element po elementu, bez přímé koordinace dokončeným stromem elementů. Událost Loaded je naproti tomu vyvolána koordinovaně v celém stromu elementů (konkrétně logický strom). Pokud jsou všechny prvky ve stromu ve stavu, ve kterém jsou považovány za načtené, je událost Loaded nejprve vyvolána v kořenovém prvku. Událost Loaded je následně vyvolána postupně u každého podřízeného prvku.

Poznámka

Toto chování může povrchně připomínat tunelování pro směrovanou událost. Z události do události se ale nepřenesou žádné informace. Každý prvek má vždy příležitost zpracovat svou Loaded událost, a označení dat události jako zpracovaných nemá žádný další vliv mimo tento prvek.

Nezatížený

Unloaded je vyvolán jako poslední a je iniciován buď zdrojem prezentace, nebo odebráním nadřazeného vizuálu. Je-li Unloaded vyvolána a zpracována, prvek, který je nadřazený zdroji událostí (určený pomocí Parent vlastnosti), nebo jakýkoli daný prvek výše v logických nebo vizuálních strukturách, může již být nenastaven, což znamená, že datové vazby, odkazy na prostředky a styly nemusí být nastaveny na jejich normální nebo poslední známou hodnotu za běhu.

Prvky modelu aplikace pro události životního cyklu

Na základě běžných událostí životnosti prvků jsou následující prvky aplikačního modelu: Application, Window, Page, NavigationWindowa Frame. Ty rozšiřují běžné události životnosti o další události, které jsou relevantní pro jejich konkrétní účel. Tyto body jsou podrobně popsány v následujících místech:

Viz také