Partilhar via


FrameworkElement.SizeChanged Evento

Definição

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 SizeChanged evento 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 SizeChanged evento é 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 redimensionou a janela do aplicativo e a exibição geral do aplicativo agora é uma exibição estreita.

SizeChanged ocorre durante o layout inicial dos 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 ocorra. Eles só obtêm valores durante a passagem de layout inicial e, portanto, ocorre o evento SizeChanged. Depois disso, durante o tempo de vida de um aplicativo, o SizeChanged evento poderá ser acionado de um elemento novamente se os ActualHeight valores 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 Panel ou ListBox que é o pai de um elemento. Isso geralmente dispara uma passagem de layout. Devido às novas condições de layout, um elemento filho independente 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 a itens pode ser atualizada ou atualizada e que 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 o modo de exibição de lista.
  • O usuário altera o tamanho da janela do aplicativo (Ocorre Window.SizeChanged ), o que, por sua vez, afeta o tamanho da Página de nível superior e talvez os tamanhos derivados de layout adaptável dos elementos nessa página que usam layout ou Stretch alinhamento "Automático" e não especificaram dimensões.
  • ApplicationView altera ou displayInformation alterações que, em última análise, afetam as dimensões de janela e página, e potencialmente todos os elementos de interface do usuário dentro.

Não é estritamente necessário evitar chamar outraS APIs que influenciam o layout do objeto atual de dentro de um SizeChanged manipulador. 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 travar. 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, LayoutUpdated a ocorrência não tem escopo para as propriedades de layout de um objeto específico, ela está relatando 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 especificações de 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 passa por 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 null, portanto, não tente usar o OriginalSource.

Aplica-se a

Confira também