Eventos do tempo de vida do objeto
Este tópico descreve os eventos específicos do WPF indicativos de estágios no ciclo de vida de um objeto: criação, uso e destruição.
Pré-requisitos
Este tópico pressupõe que você compreenda as propriedades de dependência da perspetiva 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
Eventos do 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 também têm um estágio de finalização da vida 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. A programação do WPF e os modelos de aplicação expõem esses estágios como uma série de eventos. Há quatro tipos principais de objetos no WPF com respeito a eventos de ciclo de vida: elementos em geral, elementos de janela, anfitriões de navegação e objetos de aplicação. O Windows e os hosts de navegação também estão dentro do grupo 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 comuns do ciclo de vida para elementos
Qualquer elemento ao nível da framework WPF (aqueles objetos derivados de FrameworkElement ou FrameworkContentElement) tem três eventos comuns de ciclo de vida: Initialized, Loadede Unloaded.
Inicializado
Initialized é levantado primeiro e corresponde aproximadamente à inicialização do objeto pela chamada ao seu construtor. Como o evento acontece em resposta à inicialização, você tem a garantia de que todas as propriedades do objeto estão definidas. (Como exceção, temos os usos de expressões, como recursos dinâmicos ou ligações; estas permanecerão como expressões não avaliadas.) Como consequência do requisito de que todas as propriedades sejam definidas, a sequência de Initialized, desencadeada por elementos aninhados que são definidos na marcação, parece ocorrer começando com os elementos mais profundos na árvore de elementos, e depois movendo-se para os elementos pais, em direção à raiz. Essa ordem ocorre porque as relações pai-filho e a contenção 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 completamente inicializados.
Ao escrever manipuladores em resposta ao evento Initialized, 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 os elementos pai. As variáveis de membro podem ser nulas ou as fontes de dados podem ainda não ser preenchidas pela associação subjacente (mesmo no nível da expressão).
Carregado
Loaded é o próximo a ser levantado. O evento Loaded é 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 esteja completa e se conecte 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 de Loaded. Pode ter ocorrido uma ligação assíncrona de dados (fontes externas ou dinâmicas), mas, por definição, não é possível garantir que tenha ocorrido uma ligação assíncrona de dados.
O mecanismo pelo qual o evento Loaded é gerado é diferente de Initialized. O evento Initialized é gerado elemento por elemento, sem uma coordenação direta por uma árvore de elementos concluída. Por outro lado, o evento Loaded é 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 evento Loaded é gerado primeiro no elemento raiz. O evento Loaded é então levantado sucessivamente em cada elemento filho.
Observação
Esse comportamento pode se assemelhar superficialmente ao tunelamento para um evento roteado. No entanto, nenhuma informação é transportada de evento para evento. Cada elemento sempre tem a oportunidade de manipular seu evento Loaded, 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 fonte do evento (conforme determinado pela propriedade Parent) ou qualquer elemento dado para cima nas árvores lógicas ou visuais pode já ter sido desdefinido, o que significa que a vinculação de dados, referências de recursos e estilos podem não ser definidos para seu valor de tempo de execução normal ou último conhecido.
Eventos de Vida Elementos do Modelo de Aplicação
Com base nos eventos comuns do tempo de vida dos elementos, estão os seguintes elementos do modelo de aplicativo: Application, Window, Page, NavigationWindowe Frame. Estes prolongam os eventos comuns ao longo da vida com eventos adicionais que são relevantes para o seu propósito específico. Estes são discutidos em detalhe nos seguintes locais:
Application: Visão geral do gerenciamento de aplicativos .
Ver também
.NET Desktop feedback