Compartilhar via


Eventos de tempo de vida do objeto

Este tópico descreve os eventos específicos do WPF que significam estágios em um tempo de vida de criação, uso e destruição de objetos.

Pré-requisitos

Este tópico pressupõe que você compreenda as propriedades de dependência da perspectiva de um consumidor de propriedades de dependência existentes em classes do Windows Presentation Foundation (WPF) e tenha lido o tópico Visão geral das propriedades de dependência. Para seguir os exemplos neste tópico, você também deve entender XAML (consulte XAML no WPF) e saber como escrever aplicativos WPF.

Eventos de tempo de vida do objeto

Todos os objetos no código gerenciado do Microsoft .NET Framework passam por um conjunto semelhante de estágios de vida, criação, uso e destruição. Muitos objetos têm um estágio de vida de finalização que ocorre como parte da fase de destruição. Os objetos WPF, mais especificamente os objetos visuais que o WPF identifica como elementos, também têm um conjunto de estágios comuns da vida do objeto. Os modelos de programação e aplicação do WPF expõem esses estágios como uma série de eventos. Existem quatro tipos principais de objetos no WPF com relação a eventos de vida útil; elementos em geral, elementos de janela, hosts de navegação e objetos de aplicativo. Janelas e hosts de navegação também estão no agrupamento maior de objetos visuais (elementos). Este tópico descreve os eventos de tempo de vida que são comuns a todos os elementos e, em seguida, apresenta os mais específicos que se aplicam a definições de aplicativo, janelas ou hosts de navegação.

Eventos de tempo de vida comuns aos elementos

Qualquer elemento de nível de estrutura WPF (aqueles objetos derivados de um FrameworkElement ou FrameworkContentElement) tem três eventos de vida útil comuns: Initialized, Loadede Unloaded.

Não inicializado.

Initialized é gerado primeiro, e corresponde aproximadamente à inicialização do objeto pela chamada ao seu construtor. Como o evento ocorre em resposta à inicialização, há a garantia de que todas as propriedades do objeto são definidas. (Uma exceção são os usos de expressão, como recursos dinâmicos ou vinculação; serão expressões não avaliadas.) Como consequência do requisito de que todas as propriedades sejam definidas, a sequência de ser gerado por elementos aninhados que são definidos na marcação parece ocorrer na ordem dos elementos mais profundos na árvore de Initialized elementos primeiro, em seguida, elementos pai em direção à raiz. Essa ordem ocorre porque as relações de pai e filho e o confinamento são propriedades e, portanto, o pai não pode relatar a inicialização até que os elementos filho que preenchem a propriedade também sejam inicializados completamente.

Ao escrever manipuladores em resposta ao Initialized evento, você deve considerar que não há garantia de que todos os outros elementos na árvore de elementos (árvore lógica ou árvore visual) em torno de onde o manipulador está anexado tenham sido criados, particularmente elementos pai. Variáveis de membro podem ser nulas ou fontes de dados podem ainda não ter sido preenchidas pela associação subjacente (mesmo no nível da expressão).

Carregado

Loaded é levantado em seguida. O Loaded evento é gerado antes da renderização final, mas depois que o sistema de layout calculou todos os valores necessários para a renderização. Loaded implica que a árvore lógica na qual um elemento está contido está completa e se conecta a uma fonte de apresentação que fornece o HWND e a superfície de renderização. A vinculação de dados padrão (vinculação a fontes locais, como outras propriedades ou fontes de dados definidas diretamente) terá ocorrido antes do Loaded. A vinculação de dados assíncrona (fontes externas ou dinâmicas) pode ter ocorrido, mas, por definição de sua natureza assíncrona, não pode haver garantia de que ela ocorreu.

O mecanismo pelo qual o Loaded evento é gerado é diferente de Initialized. O Initialized evento é gerado elemento por elemento, sem uma coordenação direta por uma árvore de elementos completa. Por outro lado, o Loaded evento é gerado como um esforço coordenado em toda a árvore de elementos (especificamente, a árvore lógica). Quando todos os elementos na árvore estão em um estado em que são considerados carregados, o Loaded evento é gerado primeiro no elemento raiz. O Loaded evento é então levantado sucessivamente em cada elemento filho.

Observação

Esse comportamento pode lembrar superficialmente o túnel de um evento roteado. No entanto, nenhuma informação é levada de um evento para outro. Cada elemento sempre tem a oportunidade de manipular seu Loaded evento, e marcar os dados do evento como manipulados não tem efeito além desse elemento.

Descarregado

Unloaded é gerado por último e é iniciado pela fonte da apresentação ou pelo pai visual que está sendo removido. Quando Unloaded é gerado e manipulado, o elemento que é o pai da origem do evento (conforme determinado pela Parent propriedade) ou qualquer elemento específico para cima nas árvores lógicas ou visuais pode já ter sido desdefinido, o que significa que a associação de dados, as referências de recursos e os estilos podem não estar definidos para seu valor de tempo de execução normal ou último conhecido.

Elementos de modelo de aplicativo dos eventos de tempo de vida

Com base nos eventos de tempo de vida comuns para elementos estão os seguintes elementos de modelo de aplicativo: Application, , WindowPage, NavigationWindowe Frame. Eles estendem os eventos de tempo de vida comuns com eventos adicionais que são relevantes para suas finalidades específicas. Eles são discutidos com detalhes nos seguintes locais:

Confira também