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 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
.