FrameworkElement.SizeChanged Evento

Definizione

Si verifica quando la proprietà ActualHeight o La proprietà ActualWidth cambia il valore in un 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 evento

Commenti

SizeChanged viene attivato ogni volta che le dimensioni ( ActualHeight o ActualWidth) vengono modificate nell'oggetto, ovvero dopo il completamento dei passaggi Measure e Arrange .

I dati dell'evento SizeChangedEventArgs per l'evento SizeChanged forniscono due proprietà: il valore PreviousSize , che rappresenta le dimensioni dell'elemento prima dell'operazione di modifica del layout e il valore NewSize , che rappresenta le dimensioni correnti. Per ottenere le informazioni sull'altezza e sulla larghezza, usare i valori Height e Width del valore della struttura SizeChangedEventArgs all'interno del gestore eventi.

Un motivo per gestire l'evento SizeChanged consiste nel verificare se il rapporto dell'elemento ActualHeight rispetto a ActualWidth è stato modificato a causa di un nuovo layout. Ad esempio, questo potrebbe verificarsi se l'utente ha ridimensionato la finestra dell'app e la visualizzazione dell'app complessiva è ora una visualizzazione stretta.

SizeChanged si verifica durante il layout iniziale degli elementi in una pagina, quando l'app viene attivata per la prima volta, perché i valori ActualHeight e ActualWidth per gli elementi dell'interfaccia utente non vengono definiti prima che si verifichi il layout. Ottengono solo valori durante il passaggio iniziale del layout e quindi si verifica l'evento SizeChanged. Successivamente, durante la durata di un'app, l'evento SizeChanged può essere generato di nuovo da un elemento se i valori ActualHeight e ActualWidth cambiano per altri motivi. Queste includono:

  • Codice che regola l'altezza e la larghezza di tale elemento in modo specifico.
  • Codice che modifica le proprietà del vincolo, ad esempio MinHeight o MaxHeight che influiscono su ActualHeight.
  • I valori di associazione dei dati sono stati aggiornati o nuovi stili applicati che influiscono sulle proprietà correlate al layout di FrameworkElement.
  • Codice che regola le dimensioni di un contenitore, ad esempio un pannello o un controllo ListBox padre di un elemento. Questo attiva spesso un passaggio di layout. A causa delle nuove condizioni di layout, un elemento figlio contenuto potrebbe ora avere più o meno spazio disponibile e che potrebbe comportare una nuova proprietà ActualHeight e ActualWidth per un elemento all'interno.
  • Altre modifiche che si verificano in fase di esecuzione che modificano lo spazio di layout anche se non modificano direttamente le proprietà del layout di FrameworkElement . Ad esempio, un elenco basato sull'associazione di dati agli elementi potrebbe aggiornare o aggiornare e che potrebbe causare modifiche alle dimensioni negli elementi, nei controlli degli elementi, nelle visualizzazioni elenco e così via. In alternativa, una visualizzazione elenco che supporta il caricamento incrementale potrebbe recuperare altri elementi ed espandere la visualizzazione elenco.
  • L'utente modifica le dimensioni della finestra dell'app (Window.SizeChanged), che a sua volta influisce sulle dimensioni della pagina di primo livello e forse sulle dimensioni derivate dal layout adattivo degli elementi all'interno di tale pagina che usano il layout "Auto" o l'allineamento Stretch e non specificano le dimensioni.
  • Le modifiche di ApplicationView o DisplayInformation cambiano che influiscono in definitiva sulle dimensioni della finestra e della pagina e potenzialmente tutti gli elementi dell'interfaccia utente all'interno.

Non è strettamente necessario evitare di chiamare altre API che influiscono sul layout dell'oggetto corrente dall'interno di un gestore SizeChanged. Ad esempio: impostazione altezza o larghezza; chiamata di InvalidateMeasure o UpdateLayout; chiamata ApplyTemplate; qualsiasi operazione che potrebbe ridimensionare gli elementi figlio e quindi invalidare il layout padre. Il motore di layout ha una logica interna che stabilizza i valori prima che un oggetto venga generato di nuovo l'evento, pertanto la logica è in genere abbastanza affidabile per evitare condizioni di ciclo. Tuttavia, è comunque possibile definire inavvertitamente il ridimensionamento o i cicli di rendering che possono bloccarsi l'app, che in genere genera eccezioni come LayoutCycleException anziché in realtà sospese. Ciò accade se la logica del gestore combinata con il layout circostante non è in grado di raggiungere un risultato finale per le dimensioni dell'oggetto pertinente.

Se la posizione dell'oggetto all'interno di un contenitore padre cambia, ma non le dimensioni, SizeChanged non si verificherà.

LayoutUpdated è un evento simile, ma LayoutUpdated viene attivato anche per le modifiche alla posizione. Inoltre, l'occorrenza di LayoutUpdated non è inclusa nell'ambito delle proprietà di layout di un oggetto specifico, segnala l'intero albero visivo in cui è contenuto un oggetto. LayoutUpdated informa che un elemento all'interno dell'albero visivo complessivo contenente l'oggetto è cambiato, ma le specifiche del layout (dimensione, posizione) dell'oggetto in cui è collegato il gestore potrebbero non essere state modificate.

Anche se questo evento usa un delegato correlato a RoutedEventHandler e una classe derivata da RoutedEventArgs come dati di evento, l'evento non è veramente un evento indirizzato. Non bolle attraverso un albero di oggetti. Può essere gestito solo sull'elemento che ha origine l'evento (in altre parole, il mittente). OriginalSource nei dati dell'evento per questo evento è sempre Null, quindi non provare a usare OriginalSource.

Si applica a

Vedi anche