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 "Measure".
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 dar 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 objetos secundarios o en función de otras consideraciones, como un tamaño fijo de contenedor.
Ejemplos
En este ejemplo se implementa MeasureOverride para personalizar la lógica de paso "Measure" 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 mediante un tamaño que tiene sentido en función de cómo la lógica del panel trata 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);
}
'First measure all children and return available size of panel
Protected Overrides Function MeasureOverride(ByVal availableSize As Size) As Size
'Measure first 9 children giving them space up to 100x100, remaining children get 0x0
Dim i As Integer = 0
For Each child As FrameworkElement In Children
If i < 9 Then
child.Measure(New Size(100, 100))
Else
child.Measure(New Size(0, 0))
End If
i += 1
Next
'return the size available to the whole panel, which is 300x300
Return New Size(300, 300)
End Function
Comentarios
Este método tiene una implementación predeterminada que realiza un diseño integrado para la mayoría de las clases derivadas de FrameworkElement . MeasureOverride proporciona el comportamiento de Measure, cada vez que la lógica de diseño interno llama a Measure o el código de su propia aplicación, incluidos los métodos MeasureOverride propios para otras clases. Si está produciendo un control con plantilla, la lógica MeasureOverride define la lógica de diseño de paso específica del control "Measure".
El diseño general de cómo pasan los elementos a través de 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 "Medida" del procesamiento del 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 neto deseado 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 y objetos. Durante este proceso, los objetos secundarios pueden devolver un tamaño DesiredSize mayor que el inicial availableSize para indicar que el objeto secundario quiere más espacio. Esto puede controlarse 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 contenido que puede variar en función de la funcionalidad prevista del contenedor de diseño.