UIElement.Measure(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í.
Novedades desiredSize de un uiElement. Normalmente, los objetos que implementan el diseño personalizado para sus elementos secundarios de diseño llaman a este método desde sus propias implementaciones measureOverride para formar una actualización de diseño recursiva.
public:
virtual void Measure(Size availableSize) = Measure;
void Measure(Size const& availableSize);
public void Measure(Size availableSize);
function measure(availableSize)
Public Sub Measure (availableSize As Size)
Parámetros
- availableSize
- Size
Espacio disponible que un elemento primario puede asignar a un objeto secundario. Un objeto secundario puede solicitar un espacio mayor que lo que está disponible; el tamaño proporcionado puede adaptarse si el desplazamiento u otro comportamiento de cambio de tamaño es posible en ese contenedor determinado.
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
La llamada a Measure alcanza potencialmente una implementación MeasureOverride de esa clase específica. De lo contrario, la mayoría de las clases FrameworkElement tienen un comportamiento de diseño predeterminado implícito para Measure.
availableSize puede ser cualquier número de cero a infinito. Los elementos que participan en el diseño deben devolver el tamaño mínimo que requieren para un valor availableSize determinado.
El cálculo del posicionamiento de diseño inicial en una interfaz de usuario XAML consta de una llamada Measure y una llamada Arrange , en ese orden. Durante la llamada a Measure, el sistema de diseño determina los requisitos de tamaño de un elemento mediante la medida availableSize . Durante la llamada Arrange , el sistema de diseño finaliza el tamaño y la posición del cuadro de límite de un elemento.
Cuando se genera un diseño por primera vez, siempre tiene una llamada Measure que se produce antes de Organizar. Sin embargo, después del primer pase de diseño, se puede producir una llamada Arrange sin una medida anterior. Esto puede ocurrir cuando se cambia una propiedad que afecta solo a Arrange (por ejemplo, la alineación) o cuando el elemento primario recibe un objeto Arrange sin una medida.
Una llamada a Measure invalidará automáticamente cualquier información de Organización . Por lo general, las actualizaciones de diseño se producen de forma asincrónica (en un momento determinado por el sistema de diseño). Es posible que un elemento no refleje inmediatamente los cambios en las propiedades que afectan al ajuste de tamaño del elemento (como Width).