本文由机器翻译。若要查看英语原文,请勾选“英语”复选框。 也可将鼠标指针移到文本上,在弹出窗口中显示英语原文。
翻译
英语

FrameworkElement.MeasureOverride 方法 (Size)

 

在派生类中重写时,测量子元素在布局中所需的大小,并确定由 FrameworkElement 派生的类的大小。

命名空间:   System.Windows
程序集:  PresentationFramework(位于 PresentationFramework.dll)

protected virtual Size MeasureOverride(
	Size availableSize
)

参数

availableSize
Type: System.Windows.Size

此元素可提供给子元素的可用大小。 可指定无穷大作为一个值,该值指示元素将调整到适应内容的大小。

返回值

Type: System.Windows.Size

此元素基于其对子元素大小的计算确定它在布局期间所需要的大小。

重写 MeasureOverride 来实现您的元素的自定义布局大小调整行为,如它参与了 Windows Presentation Foundation (WPF) 布局系统。 您的实现应执行以下操作︰

  1. 循环访问元素的特定集合的布局,调用的一部分的子级 Measure 每个子元素上。

  2. 立即获取 DesiredSize 在的子活动 (此值设置为一个属性后 Measure 称为)。

  3. 计算所需的基于测量到的子元素的父级净大小。

返回值 MeasureOverride 应元素自身的所需的大小,随后将成为当前元素的父元素的输入值的度量值。 通过布局系统的这一过程继续,直到达到页上的根元素。

在此过程中,子元素可能会返回一个更大 DesiredSize 大小大于初始 availableSize 来指示子元素,需要更多的空间。 通过引入可滚动区域,通过调整父控件中,通过建立某种方式的堆叠顺序或任意数量的解决方案来测量或排列内容,可能会在您自己的实现中处理此。

System_CAPS_important重要事项

元素应调用 Measure 在每个在此过程中的子活动,否则为子元素不会正确调整大小或排列。

继承函数说明:

下面的非编译代码演示此实现模式。 VisualChildren 表示应定义您自己的元素的子对象的一个可枚举集合的属性。 该属性可以命名任何内容。 VisualChildren 此示例中,目的是占位符名称 VisualChildren 不是 API 如所提供的 WPF 或命名模式的一部分...

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;
}

.NET Framework
自 3.0 起可用
Silverlight
自 2.0 起可用
Windows Phone Silverlight
自 7.0 起可用
返回页首
显示: