События времени жизни объектаObject Lifetime Events

В этом разделе описываются определенные события WPFWPF, обозначающие этапы создания, использования и удаления времени жизни объекта.This topic describes the specific WPFWPF events that signify stages in an object lifetime of creation, use, and destruction.

Предварительные требованияPrerequisites

Предполагается, что вы имеете представление о свойствах зависимостей с точки зрения потребителя существующих свойств зависимостей в классах Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) и ознакомились с разделом Общие сведения о свойствах зависимостей.This topic assumes that you understand dependency properties from the perspective of a consumer of existing dependency properties on Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) classes, and have read the Dependency Properties Overview topic. Чтобы выполнить примеры в этом разделе, следует также иметь представление о Язык XAMLExtensible Application Markup Language (XAML) (см. раздел Обзор XAML (WPF)) и знать, как создаются приложения WPFWPF.In order to follow the examples in this topic, you should also understand Язык XAMLExtensible Application Markup Language (XAML) (see XAML Overview (WPF)) and know how to write WPFWPF applications.

События времени жизни объектаObject Lifetime Events

Все объекты в управляемым кодом Microsoft .NET Framework выполните аналогичный набор этапов жизни, создания, использования и удаления.All objects in Microsoft .NET Framework managed code go through a similar set of stages of life, creation, use, and destruction. Многие объекты также имеют этап завершения, который возникает как часть этапа удаления.Many objects also have a finalization stage of life that occurs as part of the destruction phase. Объекты WPFWPF, особенно визуальные объекты, которые WPFWPF определяет как элементы, также имеют набор общих этапов жизни объекта.WPFWPF objects, more specifically the visual objects that WPFWPF identifies as elements, also have a set of common stages of object life. Модель приложений и модель программирования WPFWPF предоставляют эти этапы как последовательность событий.The WPFWPF programming and application models expose these stages as a series of events. В WPFWPF существует четыре основных типа объектов, связанных с событиями времени жизни: элементы в целом, элементы окна, узлы навигации и объекты приложения.There are four main types of objects in WPFWPF with respect to lifetime events; elements in general, window elements, navigation hosts, and application objects. Узлы окон и навигации также входят в более крупные группы визуальных объектов (элементов).Windows and navigation hosts are also within the larger grouping of visual objects (elements). В этом разделе описываются события времени жизни, которые являются общими для всех элементов, а затем даются общие сведения о конкретных событиях, которые относятся к определениям приложений, узлам окон или навигации.This topic describes the lifetime events that are common to all elements and then introduces the more specific ones that apply to application definitions, windows or navigation hosts.

Общие события времени жизни для элементовCommon Lifetime Events for Elements

Любой элемент уровня инфраструктуры WPF (объекты, производные от либо FrameworkElement или FrameworkContentElement) имеет три общих события времени жизни: Initialized, Loaded, и Unloaded.Any WPF framework-level element (those objects deriving from either FrameworkElement or FrameworkContentElement) has three common lifetime events: Initialized, Loaded, and Unloaded.

инициализированныеInitialized

Initialized возникает первым и примерно соответствует инициализации объекта путем вызова его конструктора.Initialized is raised first, and roughly corresponds to the initialization of the object by the call to its constructor. Поскольку событие происходит в ответ на инициализацию, можно гарантировать, что все свойства объекта установлены.Because the event happens in response to initialization, you are guaranteed that all properties of the object are set. (Исключением является использование таких выражений, как динамические ресурсы или привязки; это будут необработанные выражения.) В результате требование установки всех свойств, последовательность Initialized , вызванных вложенных элементов, которые определены в разметке отображается в порядке вложенности элементов в дереве элементов, во-первых, затем от родительского элемента к корню.(An exception is expression usages such as dynamic resources or binding; these will be unevaluated expressions.) As a consequence of the requirement that all properties are set, the sequence of Initialized being raised by nested elements that are defined in markup appears to occur in order of deepest elements in the element tree first, then parent elements toward the root. Этот порядок обусловлен тем, что отношения и вложения «родитель/потомок» являются свойствами, и поэтому родитель не может завершить инициализацию, пока дочерние элементы, указанные в свойстве, не будут полностью инициализированы.This order is because the parent-child relationships and containment are properties, and therefore the parent cannot report initialization until the child elements that fill the property are also completely initialized.

При написании обработчика в ответ на Initialized событий, необходимо учитывать, что нет никакой гарантии, что все остальные элементы в дереве элементов (логическом или визуальном дереве) вокруг где присоединяется обработчик, были созданы, особенно родительские элементы.When you are writing handlers in response to the Initialized event, you must consider that there is no guarantee that all other elements in the element tree (either logical tree or visual tree) around where the handler is attached have been created, particularly parent elements. Переменные члены могут быть null, или источники данных могут быть еще не заполненными через базовую привязку (даже на уровне выражения).Member variables may be null, or data sources might not yet be populated by the underlying binding (even at the expression level).

ЗагруженLoaded

Loaded Далее вызывается.Loaded is raised next. Loaded События перед окончательной отрисовкой, но после система макета вычислила все необходимые значения для подготовки к просмотру.The Loaded event is raised before the final rendering, but after the layout system has calculated all necessary values for rendering. Loaded предполагает, что логическое дерево, элемент, содержащийся в завершена и подключается к источнику представления, который предоставляет HWND и поверхность для отрисовки.Loaded entails that the logical tree that an element is contained within is complete, and connects to a presentation source that provides the HWND and the rendering surface. Стандартная привязка данных (привязка к локальному источнику, например другие свойства или явно определенным источникам данных) произойдет до Loaded.Standard data binding (binding to local sources, such as other properties or directly defined data sources) will have occurred prior to Loaded. Асинхронная привязка данных (к внешним или динамическим источникам) может произойти, но по определению асинхронности не обязательно произойдет.Asynchronous data binding (external or dynamic sources) might have occurred, but by definition of its asynchronous nature cannot be guaranteed to have occurred.

Механизм, по которому Loaded события отличается от Initialized.The mechanism by which the Loaded event is raised is different than Initialized. Initialized Событие является вызывается элементом за элементом, без прямого согласования с завершенным деревом элементов.The Initialized event is raised element by element, without a direct coordination by a completed element tree. Напротив Loaded событие вызывается в качестве согласованного усилия по всему дереву элементов (в частности, логическое дерево).By contrast, the Loaded event is raised as a coordinated effort throughout the entire element tree (specifically, the logical tree). Если все элементы в дереве находятся в состоянии, когда они считаются загружены Loaded сначала события в корневом элементе.When all elements in the tree are in a state where they are considered loaded, the Loaded event is first raised on the root element. Loaded Событий затем вызывается последовательно для каждого дочернего элемента.The Loaded event is then raised successively on each child element.

Примечание

Такое поведение может внешне напоминать туннелирование для перенаправленного события.This behavior might superficially resemble tunneling for a routed event. Тем не менее информация не переносится от события к событию.However, no information is carried from event to event. Каждый элемент всегда имеет возможность обработать его Loaded событий и пометка данных события как обработанных не оказывает влияния за пределами этого элемента.Each element always has the opportunity to handle its Loaded event, and marking the event data as handled has no effect beyond that element.

ВыгруженUnloaded

Unloaded вызывается последним и инициируется либо источником представления, либо удаляемым визуальным родителем.Unloaded is raised last and is initiated by either the presentation source or the visual parent being removed. Когда Unloaded возникает и обрабатывается, элемент, который является родителем источника события (что определяется Parent свойства) или любой конкретный элемент в логических или визуальных деревьях может уже быть сброшен, это означает, что связывание данных, ссылки на ресурсы , и стили могут быть установлены не в обычное или последнее известное значение времени выполнения.When Unloaded is raised and handled, the element that is the event source parent (as determined by Parent property) or any given element upwards in the logical or visual trees may have already been unset, meaning that data binding, resource references, and styles may not be set to their normal or last known run-time value.

Элементы модели приложений событий времени жизниLifetime Events Application Model Elements

Основываясь на общих события времени жизни для элементов являются следующие элементы модели приложений: Application, Window, Page, NavigationWindow, и Frame.Building on the common lifetime events for elements are the following application model elements: Application, Window, Page, NavigationWindow, and Frame. Они расширяют общие события времени жизни дополнительными событиями, которые связаны с их конкретными целями.These extend the common lifetime events with additional events that are relevant to their specific purpose. Эти темы подробно рассматриваются в следующих разделах.These are discussed in detail in the following locations:

См. такжеSee also