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

В этом разделе описываются определенные события WPF, обозначающие этапы создания, использования и удаления времени жизни объекта.

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

Предполагается, что вы имеете представление о свойствах зависимостей с точки зрения потребителя существующих свойств зависимостей в классах Windows Presentation Foundation (WPF) и ознакомились с разделом Общие сведения о свойствах зависимостей. Чтобы выполнить примеры в этом разделе, необходимо также понимать Язык XAML (см. XAML в WPF) и знать, как создавать WPF приложения.

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

все объекты в управляемом коде Microsoft платформа .NET Framework проходят по аналогичному набору этапов жизни, создания, использования и уничтожения. Многие объекты также имеют этап завершения, который возникает как часть этапа удаления. Объекты WPF, особенно визуальные объекты, которые WPF определяет как элементы, также имеют набор общих этапов жизни объекта. Модель приложений и модель программирования WPF предоставляют эти этапы как последовательность событий. В WPF существует четыре основных типа объектов, связанных с событиями времени жизни: элементы в целом, элементы окна, узлы навигации и объекты приложения. Узлы окон и навигации также входят в более крупные группы визуальных объектов (элементов). В этом разделе описываются события времени жизни, которые являются общими для всех элементов, а затем даются общие сведения о конкретных событиях, которые относятся к определениям приложений, узлам окон или навигации.

Общие события времени жизни для элементов

Любой элемент уровня среды WPF (объекты, производные от FrameworkElement или FrameworkContentElement ) имеют три общих события времени существования: Initialized , Loaded и Unloaded .

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

Initialized вызывается первым, и примерно соответствует инициализации объекта с помощью вызова его конструктора. Поскольку событие происходит в ответ на инициализацию, можно гарантировать, что все свойства объекта установлены. (Исключением являются использование выражений, таких как динамические ресурсы или привязка; эти выражения будут неоцененными.) В результате требования, чтобы все свойства были заданы, последовательность, создаваемая Initialized вложенными элементами, которые определены в разметке, помещается в порядке самого глубокого элемента в дереве элементов, а затем родительские элементы — к корню. Этот порядок обусловлен тем, что отношения и вложения «родитель/потомок» являются свойствами, и поэтому родитель не может завершить инициализацию, пока дочерние элементы, указанные в свойстве, не будут полностью инициализированы.

При написании обработчиков в ответ на Initialized событие необходимо учитывать, что нет никакой гарантии, что все остальные элементы в дереве элементов (логическое дерево или визуальное дерево), на которых присоединен обработчик, были созданы, особенно родительские элементы. Переменные члены могут быть null, или источники данных могут быть еще не заполненными через базовую привязку (даже на уровне выражения).

Загружен

Loaded вызывается Next. LoadedСобытие возникает перед завершающим рендерингом, но после того, как система макета вычислила все необходимые значения для подготовки к просмотру. Loaded подразумевает, что логическое дерево, в котором содержится элемент, завершено и подключается к источнику представления, который предоставляет HWND и область отрисовки. Стандартная привязка данных (привязка к локальным источникам, таким как другие свойства или непосредственно определенные источники данных) будет выполнена до Loaded . Асинхронная привязка данных (к внешним или динамическим источникам) может произойти, но по определению асинхронности не обязательно произойдет.

Механизм, с помощью которого Loaded вызывается событие, отличается от механизма Initialized . InitializedСобытие вызывается элементом по элементу без непосредственной координации завершенного дерева элементов. Напротив, Loaded событие вызывается как координированное усилия во всем дереве элементов (в частности, в логическом дереве). Когда все элементы в дереве находятся в состоянии, в котором они считаются загруженными, Loaded событие впервые создается в корневом элементе. LoadedЗатем событие создается последовательно для каждого дочернего элемента.

Примечание

Такое поведение может внешне напоминать туннелирование для перенаправленного события. Тем не менее информация не переносится от события к событию. Каждый элемент всегда имеет возможность обрабатывать свое Loaded событие, и пометка данных события как обработанных не влияет на этот элемент.

Выгружен

Unloaded вызывается последним и инициируется источником представления или удаляемым визуальным элементом. Когда Unloaded вызывается и обрабатывается, элемент, который является родительским источником события (как определено Parent свойством) или любой заданный элемент в логических или визуальных деревьях, мог быть уже удален, что означает, что привязка данных, ссылки на ресурсы и стили не могут быть установлены в нормальное или Последнее известное значение времени выполнения.

Элементы модели приложений событий времени жизни

Создание общих событий времени существования для элементов — это следующие элементы модели приложения: Application , Window , Page , NavigationWindow и Frame . Они расширяют общие события времени жизни дополнительными событиями, которые связаны с их конкретными целями. Эти темы подробно рассматриваются в следующих разделах.

См. также раздел