Eventos de duración de objetos

Actualización: noviembre 2007

En este tema se describen los eventos específicos de WPF que representan las fases de la duración de un objeto, a saber, creación, uso y destrucción.

Este tema contiene las secciones siguientes.

  • Requisitos previos
  • Eventos de duración de objetos
  • Eventos de duración comunes para elementos
  • Elementos de modelos de aplicación de eventos de duración
  • Temas relacionados

Requisitos previos

En este tema se da por sentado que el lector 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 entender Lenguaje de marcado de aplicaciones extensible (XAML) (vea Información general sobre XAML) y saber escribir aplicaciones de WPF.

Eventos de duración de objetos

Todos los objetos de código administrado de Microsoft .NET Framework pasan por 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 su duración que tiene lugar como parte de la fase de destrucción. Los objetos de WPF, y más 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 de aplicación de WPF exponen estas fases como una serie de eventos. Hay cuatro tipos principales de objetos en WPF con respecto a los eventos de duración; los elementos en general, los elementos de ventana, los hosts de navegación y los objetos de aplicación. Las ventanas y los hosts de navegación también pertenecen al grupo mayor de objetos visuales (elementos). En este tema se describen los eventos de duración comunes a todos los elementos y, a continuación, se presentan los más concretos que se aplican a las definiciones de aplicación, ventanas u hosts de navegación.

Eventos de duración comunes para elementos

Cualquier elemento de nivel de marco de trabajo de WPF (aquellos objetos que se derivan de FrameworkElement o FrameworkContentElement) tiene tres eventos de duración comunes: Initialized, Loaded y Unloaded.

Initialized

Initialized se provoca 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, es seguro que se establecen todas las propiedades del objeto. (Una excepción de ello son los usos de expresiones del tipo de recursos dinámicos o enlaces; estas expresiones no se evaluarán.) Como consecuencia del requisito de que se establezcan todas las propiedades, la secuencia del elemento Initialized provocado por elementos anidados definidos en marcado parece suceder por orden desde los elementos más profundos del árbol de elementos hasta los elementos primarios cercanos a la raíz. Este orden se debe a que las relaciones entre elementos primarios y secundarios y de contención son propiedades, y por consiguiente el elemento primario no puede comunicar la inicialización hasta que se han inicializado completamente también los elementos secundarios que rellenan la propiedad.

Cuando escriba controladores en respuesta al evento Initialized, debe tener en cuenta que no existe ninguna garantía de que se hayan creado todos los demás elementos del árbol de elementos (árbol lógico o el árbol visual) en torno al punto donde se asocie el controlador, en particular los elementos primarios. Puede que haya variables de miembro que sean null, o que algunos orígenes de datos no se hayan rellenado aún por el enlace subyacente (incluso en el nivel de expresión).

Loaded

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

El mecanismo por el que se provoca el evento Loaded es diferente que el de Initialized. El evento Initialized se provoca de elemento en elemento, sin la coordinación directa de un árbol de elementos completado. En cambio, el evento Loaded se provoca como un esfuerzo coordinado en todo el árbol de elementos (en concreto, en el árbol lógico). Cuando todos los elementos del árbol están en un estado en que se consideran cargados, el evento Loaded se provoca en primer lugar en el elemento raíz. El evento Loaded se provoca a continuación consecutivamente en cada elemento secundario.

Nota

A primera vista, este comportamiento podría parecerse a la propagación de los eventos enrutados. Sin embargo, no se lleva ninguna información de un evento a otro. Cada elemento siempre tiene la oportunidad de controlar su evento Loaded, de manera que marcar los datos de evento como controlados no surte ningún efecto más allá de ese elemento.

Unloaded

Unloaded se provoca en último lugar y lo inicia el origen de presentación o bien el elemento visual primario que se quita. Al provocar y controlar el evento Unloaded, puede suceder que elemento primario de origen del evento (según lo determina la propiedad Parent) o cualquier elemento dado que se encuentre más arriba en los árboles lógico o visual, ya no esté establecido, lo que significa que el enlace de datos, las referencias de recursos y los estilos podrían no estar establecidos en su valor normal o en su último valor conocido en tiempo de ejecución.

Elementos de modelos de aplicación de eventos de duración

Los siguientes elementos de modelos de aplicación se basan en los eventos de duración comunes para los elementos: Application, Window, Page, NavigationWindow y Frame. Éstos extienden los eventos de duración comunes con eventos adicionales que son pertinentes a su finalidad específica. Se explican con detalle en las ubicaciones siguientes:

Vea también

Conceptos

Prioridad de los valores de propiedades de dependencia

Información general sobre eventos enrutados