Partilhar via


UIElement.Measure Method

Microsoft Silverlight will reach end of support after October 2021. Learn more.

Updates the DesiredSize of a UIElement. Typically, objects that implement custom layout for their layout children call this method from their own MeasureOverride implementations to form a recursive layout update.

Namespace:  System.Windows
Assembly:  System.Windows (in System.Windows.dll)

Syntax

'Declaration
Public Sub Measure ( _
    availableSize As Size _
)
public void Measure(
    Size availableSize
)

Parameters

  • availableSize
    Type: System.Windows.Size
    The available space that a parent can allocate a child object. A child object can request a larger space than what is available; the provided size might be accommodated if scrolling or other resize behavior is possible in that particular container.

Exceptions

Exception Condition
InvalidOperationException

availableSize contained a Double.NaN value. See Remarks.

Remarks

There is no reason to call Measure or Arrange outside of the context of overriding methods that perform custom layout actions. Silverlight layout works autonomously, based on detecting changes to the object tree and layout-relevant properties at run time. For more information, see Silverlight Layout System.

The availableSize you pass to Measure cannot have a Double.NaN value for either the Height or Width of the Size. availableSize values can be any number from zero to infinite. Elements participating in layout should return the minimum Size they require for a given availableSize.

Examples

The following example implements MeasureOverride to customize the Measure pass logic for a custom panel implementation. Note in particular these aspects of the code:

  • Iterates over children.

  • For each child, calls Measure, using a Size that makes sense based on how the panel logic treats the number of children and its own known size limit.

  • Returns its size (in this case, this simple panel returns a fixed size rather than a size calculated on accumulating the measurements).

'First measure all children and return available size of panel 
Protected Overloads 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
// 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);
}

Version Information

Silverlight

Supported in: 5, 4, 3

Silverlight for Windows Phone

Supported in: Windows Phone OS 7.1, Windows Phone OS 7.0

Platforms

For a list of the operating systems and browsers that are supported by Silverlight, see Supported Operating Systems and Browsers.