FrameworkElement.MeasureOverride(Size) Método
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í.
Proporciona el comportamiento del paso "Measure" del ciclo de diseño. Las clases pueden invalidar este método para definir su propio comportamiento de paso de "Medida".
protected:
virtual Size MeasureOverride(Size availableSize) = MeasureOverride;
Size MeasureOverride(Size const& availableSize);
protected virtual Size MeasureOverride(Size availableSize);
function measureOverride(availableSize)
Protected Overridable Function MeasureOverride (availableSize As Size) As Size
Parámetros
- availableSize
- Size
Tamaño disponible que este objeto puede proporcionar a los objetos secundarios. Infinity se puede especificar como un valor para indicar que el objeto se ajustará a cualquier contenido disponible.
Devoluciones
El tamaño que este objeto determina que necesita durante el diseño, en función de sus cálculos de los tamaños asignados para los objetos secundarios o en función de otras consideraciones, como un tamaño de contenedor fijo.
Ejemplos
En este ejemplo se implementa MeasureOverride
para personalizar la lógica de paso de "Medida" para una implementación de panel personalizada. Tenga en cuenta, en particular, estos aspectos del código:
- Recorre en iteración los elementos secundarios.
- Para cada elemento secundario, llama a Measure, con un tamaño que tiene sentido en función de cómo trata la lógica del panel el número de elementos secundarios y su propio límite de tamaño conocido.
- Devuelve su tamaño (en este caso, este panel simple devuelve un tamaño fijo en lugar de un tamaño calculado al acumular las medidas).
// First measure all children and return available size of panel
protected override Size MeasureOverride(Size availableSize)
{
// Measure first 9 children giving them space up to 100x100, remaining children get 0x0
int i = 0;
foreach (FrameworkElement child in Children)
{
if (i < 9)
{
child.Measure(new Size(100, 100));
}
else
{
child.Measure(new Size(0, 0));
}
i++;
}
// return the size available to the whole panel, which is 300x300
return new Size(300, 300);
}
Comentarios
Este método tiene una implementación predeterminada que realiza el diseño integrado para la mayoría de las clases derivadas de FrameworkElement .
MeasureOverride
proporciona el comportamiento de Measure, siempre que se llame a Measure por lógica de diseño interno o por el código de su propia aplicación, incluidos los MeasureOverride
métodos propios para otras clases. Si va a generar un control con plantilla, la lógica define la MeasureOverride
lógica de diseño de paso "Medida" específica del control.
El diseño general de cómo los elementos pasan por un proceso de diseño cuando la aplicación se ejecuta se divide en dos pasos: un pase "Measure" y, a continuación, un pase "Arrange". Los autores de controles (o autores de paneles) que quieran personalizar el paso de "Medida" del procesamiento de diseño deben invalidar MeasureOverride
. La implementación debe hacer lo siguiente:
- Itere la colección concreta de objetos secundarios de la clase que forman parte del diseño y llame a Measure en cada objeto secundario.
- Obtenga Inmediatamente DesiredSize en cada elemento secundario (se establece como una propiedad después de llamar a Measure ).
- Calcule el tamaño deseado neto del elemento primario, en función de la medida en ejecución del tamaño necesario para los objetos secundarios.
El valor devuelto de
MeasureOverride
debe ser el propio tamaño deseado del objeto, que luego se convierte en la entrada Measure para el elemento primario del objeto actual. Este mismo proceso continúa a través del sistema de diseño hasta que se alcanza la raíz del árbol de páginas o objetos. Durante este proceso, los objetos secundarios pueden devolver un tamaño DesiredSize mayor que el valor de AvailableSize inicial para indicar que el objeto secundario quiere más espacio. Esto se puede controlar en su propia implementación mediante la introducción de una región desplazable, el cambio de tamaño del control primario, el establecimiento de alguna manera de orden apilado o cualquier número de soluciones para medir o organizar el contenido que puede variar en función de la funcionalidad prevista del contenedor de diseño.