FrameworkElement.SizeChanged Evento
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Ocorre quando a propriedade ActualHeight ou ActualWidth altera o valor em um FrameworkElement.
public:
virtual event SizeChangedEventHandler ^ SizeChanged;
// Register
event_token SizeChanged(SizeChangedEventHandler const& handler) const;
// Revoke with event_token
void SizeChanged(event_token const* cookie) const;
// Revoke with event_revoker
FrameworkElement::SizeChanged_revoker SizeChanged(auto_revoke_t, SizeChangedEventHandler const& handler) const;
public event SizeChangedEventHandler SizeChanged;
function onSizeChanged(eventArgs) { /* Your code */ }
frameworkElement.addEventListener("sizechanged", onSizeChanged);
frameworkElement.removeEventListener("sizechanged", onSizeChanged);
- or -
frameworkElement.onsizechanged = onSizeChanged;
Public Custom Event SizeChanged As SizeChangedEventHandler
<frameworkElement SizeChanged="eventhandler"/>
Tipo de evento
Comentários
SizeChanged é acionado sempre que o tamanho ( ActualHeight ou ActualWidth) é alterado no objeto , que é depois que as passagens Measure e Arrange são concluídas.
Os dados do evento SizeChangedEventArgs para o evento SizeChanged fornecem duas propriedades: o valor PreviousSize , representando o tamanho do elemento antes da alteração de layout acontecer e o valor NewSize , representando o tamanho atual. Para obter as informações de altura e largura, use os valores Height e Width do valor da estrutura Size para essas propriedades SizeChangedEventArgs dentro do manipulador de eventos.
Um motivo para lidar com o evento SizeChanged é ver se a proporção de ActualHeight versus ActualWidth de um elemento foi alterada devido a um novo layout. Por exemplo, isso pode acontecer se o usuário redimensionar a janela do aplicativo e a exibição geral do aplicativo agora for uma exibição estreita.
SizeChanged ocorre durante o layout inicial de elementos em uma página, quando o aplicativo é ativado pela primeira vez, porque os valores ActualHeight e ActualWidth para elementos de interface do usuário são indefinidos antes que o layout aconteça. Eles só obtêm valores durante a passagem de layout inicial e, portanto, o evento SizeChanged ocorre. Depois disso, durante o tempo de vida de um aplicativo, o evento SizeChanged poderá ser acionado de um elemento novamente se os valores ActualHeight e ActualWidth forem alterados por outros motivos. Estão incluídos:
- Código que ajusta a Altura e a Largura desse elemento especificamente.
- Código que altera as propriedades de restrição (como MinHeight ou MaxHeight afetando o ActualHeight).
- Valores de vinculação de dados atualizados ou novos estilos aplicados que afetam qualquer uma das propriedades relacionadas ao layout do FrameworkElement.
- Código que ajusta as dimensões de um contêiner como um Painel ou ListBox que é o pai de um elemento. Isso geralmente dispara um passe de layout. Devido às novas condições de layout, um elemento filho contido agora pode ter mais ou menos espaço disponível e isso pode resultar em um novo ActualHeight e ActualWidth para um elemento dentro.
- Outras alterações que ocorrem em tempo de execução que alteram o espaço de layout mesmo que não estejam alterando diretamente as propriedades de layout frameworkElement . Por exemplo, uma lista baseada na vinculação de dados aos itens pode ser atualizada ou atualizada, e isso pode causar alterações de tamanho em itens, controles de itens, exibições de lista e assim por diante. Ou uma exibição de lista que dá suporte ao carregamento incremental pode buscar mais itens e expandir a exibição de lista.
- O usuário altera o tamanho da janela do aplicativo (Ocorre Window.SizeChanged ), que, por sua vez, afeta o tamanho da Página de nível superior e talvez os tamanhos derivados de layout adaptável de elementos nessa página que usam o layout " Auto" ou o alinhamento stretch e não especificam dimensões.
- Alterações do ApplicationView ou alterações de DisplayInformation que, em última análise, afetam as dimensões da janela e da página e, potencialmente, todos os elementos da interface do usuário.
Não é estritamente necessário evitar chamar outraS API que influenciam o layout do objeto atual de dentro de um manipulador SizeChanged. Por exemplo: definindo Altura ou Largura; chamando InvalidateMeasure ou UpdateLayout; chamando ApplyTemplate; qualquer operação que possa redimensionar elementos filho e, portanto, invalidar o layout pai. O mecanismo de layout tem lógica interna que estabiliza os valores antes que um objeto dispare o evento novamente, portanto, a lógica geralmente é robusta o suficiente para evitar condições de loop. No entanto, ainda é possível definir inadvertidamente loops de dimensionamento ou renderização que podem travar seu aplicativo, o que geralmente gera exceções como LayoutCycleException em vez de realmente pendurar. Isso acontece se a lógica do manipulador combinada com o layout ao redor não for capaz de alcançar um resultado final para o tamanho do objeto relevante.
Se a posição do objeto dentro de um contêiner pai for alterada, mas não o tamanho, SizeChanged não ocorrerá.
LayoutUpdated é um evento semelhante, mas LayoutUpdated também é acionado para alterações de posição. Além disso, a ocorrência layoutUpdated não tem escopo para as propriedades de layout de um objeto específico, ela está relatando em toda a árvore visual em que um objeto está contido. LayoutUpdated informa que algo dentro da árvore visual geral que contém o objeto foi alterado, mas as especificidades do layout (tamanho, posição) do objeto em que o manipulador está anexado podem não ter sido alteradas.
Embora esse evento use um delegado relacionado a RoutedEventHandler e uma classe derivada de RoutedEventArgs como dados de evento, o evento não é realmente um evento roteado. Ele não faz bolhas através de uma árvore de objetos. Ele só pode ser manipulado no elemento que origina o evento (em outras palavras, o remetente). OriginalSource nos dados de evento para esse evento é sempre nulo, portanto, não tente usar o OriginalSource.