Sdílet prostřednictvím


Události doby života objektu

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

Předpoklady

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

Události doby života 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 existují čtyři hlavní typy objektů s ohledem na události životnosti; elementy obecně, prvky okna, hostitele navigace a objekty aplikace. Hostitelé Windows a navigace jsou také v rámci většího seskupení vizuálních objektů (prvků). 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 nebo FrameworkElementFrameworkContentElement) má tři společné události životnosti: Initialized, Loadeda Unloaded.

Initialized

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 nehodnocené.) V důsledku požadavku, že jsou nastaveny všechny vlastnosti, sekvence Initialized vyvolání vnořenými prvky, které jsou definovány v kódu, se jeví jako první v pořadí od nejsouhlších prvků ve stromu elementů a potom nadřazené prvky směrem ke kořenovému adresáři. Toto pořadí je způsobeno tím, že vztahy a zahrnutí nadřazené-podřízené jsou vlastnosti, a proto nadřazený objekt nemůže inicializovat, dokud podřízené prvky, které vyplňují vlastnost, jsou také zcela inicializovány.

Při psaní obslužných rutin v reakci na Initialized událost je nutné zvážit, že neexistuje žádná záruka, že všechny ostatní prvky ve stromu 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).

Načten

Loaded je vyvolána v dalším kroku. Událost Loaded se vyvolá před konečným vykreslováním, ale po výpočtu všech potřebných hodnot pro vykreslení systém rozložení. Loaded zahrnuje, že logický strom, v rámci kterého je prvek obsažen, je kompletní a připojuje se ke zdroji prezentace, který poskytuje HWND a vykreslovací plochu. Standardní datová vazba (vazba na místní zdroje, například jiné vlastnosti nebo přímo definované zdroje dat), se vyskytla před Loaded. 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, Loaded kterým je událost vyvolána, se liší od Initialized. Událost Initialized je vyvolána elementem bez přímé koordinace dokončeným stromem elementu. Naproti tomu Loaded událost je vyvolána jako koordinované úsilí v celém stromu prvků (konkrétně logický strom). Pokud jsou všechny prvky ve stromu ve stavu, ve kterém jsou považovány za načtené, Loaded událost je nejprve vyvolána na 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 možnost zpracovat svou Loaded událost a označení dat události, jak je zpracováno, nemá žádný vliv nad rámec tohoto prvku.

uvolněné

Unloaded je vyvolána jako poslední a je iniciována buď zdrojem prezentace, nebo nadřazeným vizuálem, který se odebere. Při Unloaded vyvolání a zpracování prvek, který je nadřazený Parent zdroj událostí (jak je určeno vlastností) nebo jakýkoli daný prvek v logických nebo vizuálních stromech již nebyl nastaven, což znamená, že vazby dat, odkazy na prostředky a styly nemusí být nastaveny na jejich normální nebo poslední známou hodnotu za běhu.

Prvky aplikačního modelu události životnosti

Vytváření běžných událostí životnosti prvků jsou následující prvky aplikačního modelu: Application, Window, PageNavigationWindowa Frame. Ty rozšiřují běžné události životnosti o další události, které jsou relevantní pro jejich konkrétní účel. Tyto informace jsou podrobně popsány v následujících umístěních:

Viz také