FrameworkElement.SizeChanged Événement

Définition

Se produit lorsque la propriété ActualHeight ou ActualWidth modifie la valeur d’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"/>

Type d'événement

Remarques

SizeChanged se déclenche chaque fois que la taille ( ActualHeight ou ActualWidth) a changé sur l’objet, c’est-à-dire une fois que les passes Measure et Arrange sont terminées.

Les données d’événement SizeChangedEventArgs de l’événement SizeChanged fournissent deux propriétés : la valeur PreviousSize , qui représente la taille de l’élément avant la modification de la disposition, et la valeur NewSize , qui représente la taille actuelle. Pour obtenir les informations de hauteur et de largeur, utilisez les valeurs Height et Width de la valeur de structure Size pour ces propriétés SizeChangedEventArgs dans votre gestionnaire d’événements.

L’une des raisons de gérer l’événement SizeChanged est de voir si le rapport entre ActualHeight et ActualWidth d’un élément a changé en raison d’une nouvelle disposition. Par exemple, cela peut se produire si l’utilisateur a redimensionné la fenêtre de l’application et que la vue globale de l’application est désormais une vue étroite.

SizeChanged se produit lors de la mise en page initiale des éléments d’une page, lorsque l’application est activée en premier, car les valeurs ActualHeight et ActualWidth pour les éléments d’interface utilisateur ne sont pas définies avant la mise en page. Ils n’obtiennent des valeurs que pendant le passage de disposition initial et, par conséquent, l’événement SizeChanged se produit. Par la suite, pendant la durée de vie d’une application, l’événement SizeChanged peut se déclencher à nouveau à partir d’un élément si les valeurs ActualHeight et ActualWidth changent pour d’autres raisons. Il s’agit notamment des paramètres suivants :

  • Code qui ajuste spécifiquement la hauteur et la largeur de cet élément.
  • Code qui modifie les propriétés de contrainte (comme MinHeight ou MaxHeight affectant actualHeight).
  • Valeurs de liaison de données actualisées ou nouveaux styles appliqués qui affectent les propriétés liées à la disposition de FrameworkElement.
  • Code qui ajuste les dimensions d’un conteneur, tel qu’un Panel ou listBox qui est le parent d’un élément. Cela déclenche souvent une passe de disposition. En raison des nouvelles conditions de disposition, un élément enfant contenu peut maintenant avoir plus ou moins d’espace disponible, ce qui peut entraîner une nouvelle ActualHeight et ActualWidth pour un élément dans.
  • D’autres modifications qui se produisent au moment de l’exécution modifient l’espace de disposition même si elles ne modifient pas directement les propriétés de disposition FrameworkElement . Par exemple, une liste basée sur la liaison de données à des éléments peut être actualisée ou mise à jour, ce qui peut entraîner des modifications de taille dans les éléments, les contrôles d’éléments, les affichages de liste, etc. Ou un affichage de liste qui prend en charge le chargement incrémentiel peut extraire plus d’éléments et développer l’affichage liste.
  • L’utilisateur modifie la taille de la fenêtre de l’application (Window.SizeChanged se produit), ce qui affecte à son tour la taille de la page de niveau supérieur et peut-être les tailles dérivées de la disposition adaptative des éléments de cette page qui utilisent la disposition « automatique » ou l’alignement Stretch et n’ont pas spécifié de dimensions.
  • Modifications ApplicationView ou DisplayInformation qui affectent finalement les dimensions de la fenêtre et de la page, et potentiellement tous les éléments d’interface utilisateur dans.

Il n’est pas strictement nécessaire d’éviter d’appeler d’autres API qui influencent la disposition de l’objet actuel à partir d’un gestionnaire SizeChanged. Par exemple : définition de la hauteur ou de la largeur ; appel de InvalidateMeasure ou UpdateLayout ; appel de ApplyTemplate ; toute opération susceptible de redimensionner des éléments enfants et, par conséquent, d’invalider la disposition parente. Le moteur de disposition a une logique interne qui stabilise les valeurs avant qu’un objet déclenche à nouveau l’événement, de sorte que la logique est généralement suffisamment robuste pour éviter les conditions de bouclage. Toutefois, il est toujours possible de définir par inadvertance des boucles de dimensionnement ou de rendu qui peuvent bloquer votre application, ce qui lève généralement des exceptions telles que LayoutCycleException plutôt que réellement suspendues. Cela se produit si votre logique de gestionnaire combinée avec la disposition environnante n’est pas en mesure d’atteindre un résultat final pour la taille de l’objet approprié.

Si la position de l’objet dans un conteneur parent change, mais pas la taille, SizeChanged ne se produit pas.

LayoutUpdated est un événement similaire, mais LayoutUpdated est également déclenché pour les modifications de position. En outre, l’occurrence LayoutUpdated n’est pas limitée aux propriétés de disposition d’un objet spécifique, mais elle rend compte de l’ensemble de l’arborescence visuelle dans laquelle un objet est contenu. LayoutUpdated vous informe que quelque chose dans l’arborescence visuelle globale qui contient l’objet a changé, mais que les spécificités de la disposition (taille, position) de l’objet où le gestionnaire est attaché n’ont peut-être pas changé.

Bien que cet événement utilise un délégué lié à RoutedEventHandler et une classe dérivée de RoutedEventArgs comme données d’événement, l’événement n’est pas vraiment un événement routé. Il ne bulle pas dans une arborescence d’objets. Il ne peut être géré que sur l’élément qui provient de l’événement (en d’autres termes, l’expéditeur). OriginalSource dans les données d’événement pour cet événement étant toujours null, n’essayez pas d’utiliser OriginalSource.

S’applique à

Voir aussi