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í.
Cuando se reemplaza en una clase derivada, mide el tamaño en el diseño necesario para los elementos secundarios y determina un tamaño para la FrameworkElementclase derivada.
protected:
virtual System::Windows::Size MeasureOverride(System::Windows::Size availableSize);
protected virtual System.Windows.Size MeasureOverride(System.Windows.Size availableSize);
abstract member MeasureOverride : System.Windows.Size -> System.Windows.Size
override this.MeasureOverride : System.Windows.Size -> System.Windows.Size
Protected Overridable Function MeasureOverride (availableSize As Size) As Size
Parámetros
- availableSize
- Size
Tamaño disponible que este elemento puede proporcionar a los elementos secundarios. Infinity se puede especificar como un valor para indicar que el elemento se ajustará a cualquier contenido disponible.
Devoluciones
El tamaño que este elemento determina que necesita durante el diseño, en función de sus cálculos de tamaños de elemento secundarios.
Comentarios
Invalide MeasureOverride para implementar el comportamiento de ajuste de tamaño del diseño personalizado para el elemento a medida que participa en el sistema de diseño de Windows Presentation Foundation (WPF). La implementación debe hacer lo siguiente:
Iteración de la colección concreta del elemento de elementos secundarios que forman parte del diseño, llame a Measure en cada elemento secundario.
Obtenga DesiredSize inmediatamente el elemento secundario (se establece como una propiedad después Measure de llamar a ).
Calcule el tamaño deseado neto del elemento primario en función de la medida de los elementos secundarios.
El valor devuelto de MeasureOverride debe ser el propio tamaño deseado del elemento, que luego se convierte en la entrada de medida para el elemento primario del elemento actual. Este mismo proceso continúa a través del sistema de diseño hasta que se alcanza el elemento raíz de la página.
Durante este proceso, los elementos secundarios pueden devolver un tamaño mayor DesiredSize que el inicial availableSize para indicar que el elemento secundario quiere más espacio. Esto puede controlarse en su propia implementación mediante la introducción de una región desplazable mediante el cambio de tamaño del control primario, estableciendo alguna manera de orden apilado o cualquier número de soluciones para medir o organizar el contenido.
Importante
Los elementos deben llamar a Measure en cada elemento secundario durante este proceso; de lo contrario, los elementos secundarios no tendrán el tamaño correcto ni se organizarán.
Notas a los desarrolladores de herederos
El siguiente código que no es de compilación muestra este patrón de implementación.
VisualChildren representa una propiedad de colección enumerable de elementos secundarios que debe definir su propio elemento. La propiedad puede denominarse cualquier cosa.
VisualChildren es un nombre de marcador de posición para los fines de este ejemplo, VisualChildren no es una API tal como se proporciona en WPF o una parte de un patrón de nomenclatura.
protected override Size MeasureOverride(Size availableSize)
{
Size desiredSize = new Size();
foreach (UIElement child in VisualChildren)
{
child.Measure(availableSize);
// do something with child.DesiredSize, either sum them directly or apply whatever logic your element has for reinterpreting the child sizes
// if greater than availableSize, must decide what to do and which size to return
}
// desiredSize = ... computed sum of children's DesiredSize ...;
// IMPORTANT: do not allow PositiveInfinity to be returned, that will raise an exception in the caller!
// PositiveInfinity might be an availableSize input; this means that the parent does not care about sizing
return desiredSize;
}
Protected Overrides Function MeasureOverride(ByVal availableSize As Size) As Size
Dim desiredSize As New Size()
For Each child As UIElement In VisualChildren
child.Measure(availableSize)
' do something with child.DesiredSize, either sum them directly or apply whatever logic your element has for reinterpreting the child sizes
' if greater than availableSize, must decide what to do and which size to return
Next child
' desiredSize = ... computed sum of children's DesiredSize ...
' IMPORTANT: do not allow PositiveInfinity to be returned, that will raise an exception in the caller!
' PositiveInfinity might be an availableSize input - this means that the parent does not care about sizing
Return desiredSize
End Function