FrameworkElement.SizeChanged Evento
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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 SizeChanged
evento 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 SizeChanged
evento es ver si la relación de un elemento ActualHeight 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 la aplicación se activa 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 SizeChanged
evento puede activarse de nuevo desde un elemento si los ActualHeight
valores 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 afectan 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, y esto 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 aunque no cambien 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 (se produce Window.SizeChanged ), 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 de esa página que usan el diseño o
Stretch
la alineación "Automático" y no especificaron dimensiones. - ApplicationView cambia o DisplayInformation cambia que, en última instancia, afectan a las dimensiones de la ventana y de la 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 SizeChanged
controlador. Por ejemplo: establecer Alto o Ancho; 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, SizeChanged
no se producirá.
LayoutUpdated es un evento similar, pero LayoutUpdated
también se desencadena para los cambios de posición. Además, LayoutUpdated
la repetición no tiene como ámbito las propiedades de diseño de un objeto específico, se informa sobre 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 no haya cambiado el diseño específico (tamaño, posición) del objeto donde está asociado el controlador.
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 null
es , por lo que no intente usar .OriginalSource