FrameworkElement.SizeChanged Evento

Definición

Se produce cuando la propiedad ActualHeight o ActualWidth cambia el valor en 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 de evento

Comentarios

SizeChanged se activa cada vez que el tamaño ( ActualHeight o ActualWidth) ha cambiado en el objeto , que es después de que se completen los pasos Measure y Arrange .

Los datos del evento SizeChangedEventArgs para el evento SizeChanged proporcionan dos propiedades: el valor PreviousSize , que representa el tamaño del elemento antes de que se produzca el cambio de diseño y el valor NewSize , que representa el tamaño actual. Para obtener la información de alto y ancho, use los valores Height y Width del valor de la estructura Size para estas propiedades SizeChangedEventArgs dentro del controlador de eventos.

Una razón para controlar el evento SizeChanged es ver si la proporción de ActualHeight de un elemento frente a ActualWidth ha cambiado, debido a un nuevo diseño. Por ejemplo, esto puede ocurrir si el usuario ha cambiado el tamaño de la ventana de la aplicación y la vista general de la aplicación ahora es una vista estrecha.

SizeChanged se produce durante el diseño inicial de los elementos de una página, cuando se activa la aplicación por primera vez, porque los valores ActualHeight y ActualWidth de los elementos de la interfaz de usuario no están definidos antes de que se produzca el diseño. Solo obtienen valores durante el paso de diseño inicial y, por tanto, se produce el evento SizeChanged. A partir de entonces, durante la vigencia de una aplicación, el evento SizeChanged puede activarse de nuevo desde un elemento si los valores ActualHeight y ActualWidth cambian por otros motivos. Entre ellas se incluyen las siguientes:

  • Código que ajusta específicamente el alto y el ancho de ese elemento.
  • Código que cambia las propiedades de restricción (como MinHeight o MaxHeight que afecta a ActualHeight).
  • Los valores de enlace de datos se actualizaron o se aplicaron nuevos estilos que afectan a cualquiera de las propiedades relacionadas con el diseño de FrameworkElement.
  • Código que ajusta las dimensiones de un contenedor como un Panel o ListBox que es el elemento primario de un elemento. Esto suele desencadenar un pase de diseño. Debido a las nuevas condiciones de diseño, un elemento secundario contenido ahora podría tener más o menos espacio disponible, lo que podría dar lugar a un nuevo ActualHeight y ActualWidth para un elemento dentro de .
  • Otros cambios que se producen en tiempo de ejecución que cambian el espacio de diseño incluso si no cambian directamente las propiedades de diseño frameworkElement . Por ejemplo, una lista basada en el enlace de datos a elementos podría actualizarse o actualizarse, y esto podría provocar cambios de tamaño en elementos, controles de elementos, vistas de lista, etc. O bien, una vista de lista que admita la carga incremental podría capturar más elementos y expandir la vista de lista.
  • El usuario cambia el tamaño de la ventana de la aplicación (Window.SizeChanged se produce), lo que a su vez afecta al tamaño de la página de nivel superior y quizás los tamaños derivados del diseño adaptable de los elementos dentro de esa página que usan el diseño "Automático" o la alineación stretch y no especifican dimensiones.
  • ApplicationView cambia o DisplayInformation que, en última instancia, afectan a las dimensiones de ventana y página, y potencialmente a todos los elementos de la interfaz de usuario dentro.

No es estrictamente necesario evitar llamar a otras API que influyen en el diseño del objeto actual desde un controlador SizeChanged. Por ejemplo: establecer Height o Width; llamar a InvalidateMeasure o UpdateLayout; llamar a ApplyTemplate; cualquier operación que pueda cambiar el tamaño de los elementos secundarios y, por tanto, invalidar el diseño primario. El motor de diseño tiene lógica interna que estabiliza los valores antes de que un objeto vuelva a activar el evento, por lo que la lógica suele ser lo suficientemente sólida como para evitar condiciones de bucle. Sin embargo, todavía es posible definir accidentalmente bucles de ajuste de tamaño o representación que pueden bloquear la aplicación, lo que generalmente produce excepciones como LayoutCycleException en lugar de colgar realmente. Esto sucede si la lógica del controlador combinada con el diseño circundante no es capaz de alcanzar un resultado final para el tamaño del objeto pertinente.

Si la posición del objeto dentro de un contenedor primario cambia, pero no el tamaño, No se producirá SizeChanged.

LayoutUpdated es un evento similar, pero LayoutUpdated también se desencadena para los cambios de posición. Además, la aparición de LayoutUpdated no tiene como ámbito las propiedades de diseño de un objeto específico, se informa de todo el árbol visual en el que se encuentra un objeto. LayoutUpdated le informa de que algo dentro del árbol visual general que contiene el objeto ha cambiado, pero es posible que los detalles del diseño (tamaño, posición) del objeto en el que está asociado el controlador no hayan cambiado.

Aunque este evento usa un delegado relacionado con RoutedEventHandler y una clase derivada de RoutedEventArgs como datos de eventos, el evento no es realmente un evento enrutado. No se propaga a través de un árbol de objetos. Solo se puede controlar en el elemento que origina el evento (es decir, el remitente). OriginalSource en los datos de evento para este evento siempre es null, por lo que no intente usar OriginalSource.

Se aplica a

Consulte también