FrameworkElement.SizeChanged Evento
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Si verifica quando la proprietà ActualHeight o ActualWidth modifica 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 generato ogni volta che la dimensione ( ActualHeight o ActualWidth) è stata modificata nell'oggetto, che è 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'avvenuta 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 tra ActualHeight e ActualWidth di un elemento è stato modificato a causa di un nuovo layout. Ad esempio, questo può verificarsi se l'utente ha ridimensionato la finestra dell'app e la visualizzazione generale dell'app è ora una visualizzazione ridotta.
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 sono definiti prima che si verifichi il layout. Ottengono solo valori durante il passaggio di layout iniziale 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 ActualHeight
valori e ActualWidth
cambiano per altri motivi. Queste includono:
- Codice che regola l'altezza e la larghezza dell'elemento in modo specifico.
- Codice che modifica le proprietà del vincolo, ad esempio MinHeight o MaxHeight che influiscono su ActualHeight.
- I valori di associazione dati aggiornati o nuovi stili applicati che influiscono su qualsiasi proprietà correlata al layout di FrameworkElement.
- Codice che regola le dimensioni di un contenitore, ad esempio un controllo Panel o 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 ciò potrebbe comportare una nuova proprietà ActualHeight e ActualWidth per un elemento all'interno.
- Altre modifiche apportate 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 dati agli elementi potrebbe essere aggiornato o aggiornato e ciò potrebbe causare modifiche alle dimensioni in elementi, controlli elementi, visualizzazioni elenco e così via. In alternativa, una visualizzazione elenco che supporta il caricamento incrementale potrebbe recuperare più 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, ad esempio, sulle dimensioni derivate dal layout adattivo degli elementi all'interno di tale pagina che usano il layout o
Stretch
l'allineamento "Auto" e non specificano le dimensioni. - Le modifiche di ApplicationView o DisplayInformation che in ultima analisi influiscono sulle dimensioni della finestra e della pagina e potenzialmente su tutti gli elementi dell'interfaccia utente all'interno.
Non è strettamente necessario evitare di chiamare altre API che influenzano il layout dell'oggetto corrente dall'interno di un SizeChanged
gestore. Ad esempio: impostazione altezza o larghezza; chiamata invalidateMeasure o UpdateLayout; chiamando ApplyTemplate; qualsiasi operazione che potrebbe ridimensionare gli elementi figlio e quindi invalidare il layout padre. Il motore di layout ha logica interna che stabilizza i valori prima che un oggetto venga generato nuovamente l'evento, quindi la logica è in genere abbastanza solida per evitare condizioni di ciclo. Tuttavia, è comunque possibile definire inavvertitamente il ridimensionamento o i cicli di rendering che possono bloccare l'app, che in genere genera eccezioni come LayoutCycleException anziché appesi. Ciò si verifica 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 verrà eseguita.
LayoutUpdated è un evento simile, ma LayoutUpdated
viene generato anche per le modifiche della posizione. Inoltre, LayoutUpdated
l'occorrenza non ha come ambito le proprietà di layout di un oggetto specifico, ma segnala l'intera struttura ad albero visuale in cui è contenuto un oggetto.
LayoutUpdated
indica che un elemento all'interno dell'albero visivo complessivo che contiene l'oggetto è cambiato, ma le specifiche del layout (dimensione, posizione) dell'oggetto in cui è associato 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 è realmente un evento indirizzato. Non scorre 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