Compartir vía


Eventos de duración de objetos

En este tema se describen los eventos específicos de WPF que indican las fases de duración de la creación, el uso y la destrucción de objetos.

Requisitos previos

En este tema se supone que entiende las propiedades de dependencia desde la perspectiva de un consumidor de propiedades de dependencia existentes en las clases de Windows Presentation Foundation (WPF), y que ha leído el tema Información general sobre las propiedades de dependencia. Para seguir los ejemplos de este tema, también debe comprender el lenguaje XAML (consulte XAML en WPF) y saber cómo escribir aplicaciones de WPF.

Eventos de duración de objetos

Todos los objetos del código administrado en Microsoft .NET Framework tienen un conjunto similar de fases de duración, creación, uso y destrucción. Además, muchos objetos tienen una fase de finalización de duración que se produce como parte de la fase de destrucción. Los objetos de WPF, concretamente los objetos visuales que WPF identifica como elementos, también tienen un conjunto de fases comunes de duración de objeto. Los modelos de programación y aplicación de WPF exponen estas fases como una serie de eventos. Hay cuatro tipos principales de objetos de WPF con respecto a los eventos de duración: elementos en general, elementos de ventana, hosts de navegación y objetos de aplicación. Las ventanas y los hosts de navegación también se encuentran dentro de un grupo más grande de objetos visuales (elementos). En este tema se describen los eventos de duración que son comunes para todos los elementos y se indican los más específicos que se aplican a las definiciones de aplicación, las ventanas o los hosts de navegación.

Eventos de duración comunes para elementos

Cualquier elemento de nivel de marco de WPF (los objetos derivados de FrameworkElement o FrameworkContentElement) tiene tres eventos de duración comunes: Initialized, Loadedy Unloaded.

Inicializado

Initialized se genera primero y corresponde aproximadamente a la inicialización del objeto mediante la llamada a su constructor. Dado que el evento se produce en respuesta a la inicialización, se garantiza que se establecen todas las propiedades del objeto. (Las excepciones son los usos de la expresión, como recursos dinámicos o enlaces, que son expresiones no evaluadas). Como consecuencia de los requisitos en los que se establecen las propiedades, la secuencia de Initialized que generan elementos anidados definidos en la marcación parece que ocurre, en primer lugar, con el orden de los elementos más profundos del árbol de elementos y continúa con los elementos primarios hasta la raíz. Este orden se debe a que las relaciones entre elementos primarios y secundarios y las inclusiones son propiedades y, por tanto, el elemento primario no puede informar de la inicialización hasta que los elementos secundarios que rellenan la propiedad estén inicializados completamente.

Al escribir controladores en respuesta al evento Initialized, debe tener en cuenta que no hay ninguna garantía de que se hayan creado todos los demás elementos del árbol de elementos (árbol visual o árbol lógico) de alrededor de la ubicación donde se adjuntó el controlador, especialmente los elementos primarios. Es posible que las variables de miembro sean nulas o que el enlace subyacente no haya rellenado todavía los orígenes de datos (incluso en el nivel de expresión).

Cargado

Loaded se genera a continuación. El evento Loaded se genera antes de la representación final, pero después de que el sistema de diseño haya calculado todos los valores necesarios para la representación. Loaded implica que el árbol lógico que contiene un elemento está completado y se conecta a un origen de presentación que proporciona HWND y la superficie de representación. El enlace de datos estándar (enlace a orígenes locales, como otras propiedades u orígenes de datos definidos directamente) se habrá producido antes que Loaded. Es posible que el enlace de datos asincrónico (orígenes externos o dinámicos) se haya producido, pero, por definición de su naturaleza asincrónica, no se puede garantizar que realmente se haya producido.

El mecanismo mediante el que se genera el evento Loaded es diferente al de Initialized. El evento Initialized se genera elemento por elemento, sin la coordinación directa de un árbol de elementos completado. Por el contrario, el evento Loaded se genera como un esfuerzo coordinado en todo el árbol de elementos (en concreto, el árbol lógico). Cuando todos los elementos del árbol están en un estado en el que se consideran cargados, el evento Loaded se genera antes en el elemento raíz. A continuación, el evento Loaded se genera sucesivamente en cada elemento secundario.

Nota

Este comportamiento puede parecerse a primera vista a una tunelización para un evento enrutado. Sin embargo, no se desplaza información de un evento a otro. Cada elemento tiene siempre la oportunidad de controlar su evento Loaded y marcar los datos de evento como controlados no tiene ningún efecto fuera del elemento.

Descargado

Unloaded se genera en último lugar y se inicia cuando se quita el origen de presentación o el objeto visual primario. Cuando se genera y se controla Unloaded, es posible que el elemento que es el origen de evento principal (según lo determina la propiedad Parent) o cualquier elemento superior de los árboles lógicos o visuales esté sin establecer, lo que significa que es posible que el enlace de datos, las referencias de recursos y los estilos no estén establecidos en su valor de tiempo de ejecución normal o último conocido.

Elementos del modelo de aplicación de eventos de duración

Los siguientes elementos del modelo de aplicación se basan en los eventos de duración comunes para elementos: Application, Window, Page, NavigationWindow y Frame. Extienden los eventos de duración comunes con eventos adicionales que son pertinentes para su finalidad específica. Esto se trata detalladamente en las siguientes ubicaciones:

Vea también