FrameworkElement.MeasureOverride(Size) 方法

定义

为布局周期的“度量”传递提供行为。 类可以重写此方法以定义其自己的“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

参数

availableSize
Size

此对象可以提供给子对象的可用大小。 无穷大可以指定为一个值,以指示对象将调整为任何可用内容的大小。

返回

此对象在布局期间确定它所需的大小,具体取决于其为子对象分配的大小计算,或者基于其他注意事项(如固定容器大小)。

示例

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

  • 循环访问子级。
  • 对于每个子级,调用 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);
}

注解

此方法具有默认实现,该实现为大多数 FrameworkElement 派生类执行内置布局。 MeasureOverride每当由内部布局逻辑或你自己的应用代码调用 Measure 时(包括用于其他类的任何MeasureOverride自己的方法)时,为 Measure 提供行为。 如果要生成模板化控件,该 MeasureOverride 逻辑定义控件的特定“Measure”传递布局逻辑。

应用运行时元素如何通过布局过程的常规设计分为两个步骤:“度量”传递,然后是“排列”传递。 想要自定义布局处理的“度量”传递的控件作者 (或面板作者) 应替代 MeasureOverride。 实现应执行以下操作:

  • 循环访问属于布局的一部分的类的特定子对象集合,并为每个子对象调用 Measure
  • 在调用 Measure) 后,立即获取每个子级上的 DesiredSize (此属性设置为属性。
  • 根据子对象所需大小的运行度量值,计算父级所需的净大小。 的 MeasureOverride 返回值应为对象自己的所需大小,然后成为当前对象的父对象的 度量 值输入。 此过程在布局系统中继续进行,直到到达页面/对象树的根目录。 在此过程中,子对象可能会返回比初始 availableSize 更大的 DesiredSize 大小,以指示子对象需要更多空间。 这可以通过引入可滚动区域、调整父控件的大小、建立某种堆积顺序的方式,或者在测量或排列内容(根据布局容器的预期功能而有所不同)的任意数量的解决方案中进行处理。

适用于

另请参阅