UIElement.Measure(Size) 方法

定义

汇报 UIElementDesiredSize。 通常,为其布局子级实现自定义布局的对象从其自己的 MeasureOverride 实现中调用此方法,以形成递归布局更新。

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)

参数

availableSize
Size

父级可以分配给子对象的可用空间。 子对象可以请求比可用空间更大的空间;如果在特定容器中可以滚动或其他重设大小行为,则可以调整提供的大小。

示例

此示例实现 MeasureOverride 以自定义自定义面板实现的“Measure”传递逻辑。 特别要注意代码的以下方面:

  • 循环访问子级。
  • 对于每个子级,调用 Measure,使用根据面板逻辑如何处理子级数及其自己的已知大小限制有意义的 Size
  • 在本例中,返回其大小 (,此简单面板返回固定大小,而不是在) 累计度量值时计算的大小。
// 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

注解

Measure 调用可能会达到该特定类的 MeasureOverride 实现。 否则,大多数 FrameworkElement 类具有 Measure 的隐式默认布局行为。

availableSize 可以是从零到无限的任意数字。 参与布局的元素应返回给定 availableSize 所需的最小大小

XAML UI 中初始布局定位的计算包括一个 Measure 调用和一个 Arrange 调用(按该顺序)。 在 Measure 调用期间,布局系统使用 availableSize 度量来确定元素的大小要求。 在 Arrange 调用期间,布局系统会确定元素边界框的大小和位置。

首次生成布局时,它始终具有在 Arrange 之前发生的 Measure 调用。 但是,在第一次布局传递后, 在前面 没有 Measure 的情况下,可能会发生 Arrange 调用。 当仅影响 Arrange 的属性 (更改(例如对齐) )或父级收到不含 Measure 的 Arrange 时,可能会发生这种情况。

Measure 调用将自动使任何 排列 信息失效。 布局更新通常在布局系统) 确定的时间异步 (发生。 元素可能不会立即反映影响元素大小调整 (的属性更改,例如 Width) 。

适用于

另请参阅