Para ver el artículo en inglés, active la casilla Inglés. También puede ver el texto en inglés en una ventana emergente si pasa el puntero del mouse por el texto.
Traducción
Inglés
Esta documentación está archivada y no tiene mantenimiento.

Eventos de duración de objetos

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.

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 Extensible Application Markup Language (XAML) (vea Información general sobre XAML (WPF)) y saber escribir aplicaciones de WPF.

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.

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 presentación final, pero después de que el sistema de diseño haya calculado todos los valores necesarios para presentar. 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 presentació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.

NotaNota

A primera vista, este comportamiento podría parecerse a la tunelizació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.

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:

Mostrar: