События времени жизни объекта
В этом разделе описываются определенные события 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 Далее вызывается. Loaded События перед окончательной отрисовкой, но после система макета вычислила все необходимые значения для подготовки к просмотру. Loaded предполагает, что логическое дерево, элемент, содержащийся в завершена и подключается к источнику представления, который предоставляет HWND и поверхность для отрисовки. Стандартная привязка данных (привязка к локальному источнику, например другие свойства или явно определенным источникам данных) произойдет до Loaded. Асинхронная привязка данных (к внешним или динамическим источникам) может произойти, но по определению асинхронности не обязательно произойдет.
Механизм, по которому Loaded события отличается от Initialized. Initialized Событие является вызывается элементом за элементом, без прямого согласования с завершенным деревом элементов. Напротив Loaded событие вызывается в качестве согласованного усилия по всему дереву элементов (в частности, логическое дерево). Если все элементы в дереве находятся в состоянии, когда они считаются загружены Loaded сначала события в корневом элементе. Loaded Событий затем вызывается последовательно для каждого дочернего элемента.
Note
Такое поведение может внешне напоминать туннелирование для перенаправленного события. Тем не менее информация не переносится от события к событию. Каждый элемент всегда имеет возможность обработать его Loaded событий и пометка данных события как обработанных не оказывает влияния за пределами этого элемента.
Выгружен
Unloaded вызывается последним и инициируется либо источником представления, либо удаляемым визуальным родителем. Когда Unloaded возникает и обрабатывается, элемент, который является родителем источника события (что определяется Parent свойства) или любой конкретный элемент в логических или визуальных деревьях может уже быть сброшен, это означает, что связывание данных, ссылки на ресурсы , и стили могут быть установлены не в обычное или последнее известное значение времени выполнения.
Элементы модели приложений событий времени жизни
Основываясь на общих события времени жизни для элементов являются следующие элементы модели приложений: Application, Window, Page, NavigationWindow, и Frame. Они расширяют общие события времени жизни дополнительными событиями, которые связаны с их конкретными целями. Эти темы подробно рассматриваются в следующих разделах.