导出 (0) 打印
全部展开
展开 最小化
此文章由人工翻译。 将光标移到文章的句子上,以查看原文。
译文
原文

UIElement.Measure 方法

更新 UIElementDesiredSize 父元素从其自身的 MeasureCore 实现调用此方法以形成递归布局更新。 调用此方法构成布局更新的第一个处理过程(“测量”处理过程)。

命名空间:  System.Windows
程序集:  PresentationCore(在 PresentationCore.dll 中)

public void Measure(
	Size availableSize
)

参数

availableSize
类型:System.Windows.Size
父元素可以为子元素分配的可用空间。 子元素可以请求大于可用空间的空间,如果可在当前元素的内容模型中进行滚动,则提供的大小可以适应此空间。

Windows Presentation Foundation (WPF) 中的布局位置计算由 Measure 调用和 Arrange 调用组成。 Measure 调用期间,元素通过使用 availableSize 输入来确定其大小要求。 Arrange 调用期间,完成元素的大小。

availableSize 可以是从零到无穷大之间的任意数字。 参与布局的元素应返回它们对于给定 availableSize 所要求的最小 Size

初次实例化一个布局时,该布局总是在 Arrange 之前接受 Measure 调用。 但是,在第一个布局处理过程之后,它可能收到不带 MeasureArrange 调用;当仅影响 Arrange 的属性更改(如对齐方式)时,或者父元素收到不带 MeasureArrange 时可能发生这种情况。 Measure 调用将自动使 Arrange 调用无效。

布局更新异步发生,这样主线程就不会等待每一次可能的布局更改。 通过对属性值进行代码隐藏检查来查询元素可能不会立即将更改反映到与大小或布局特征进行交互的属性(如 Width 属性)。

注意注意

可以通过使用 UpdateLayout 方法来强制进行布局更新。 但是,调用此方法通常没有必要且可能导致性能降低。

布局系统保持两个单独的无效布局队列,一个用于 Measure,另一个用于 Arrange 基于元素在元素执行布局的可视树上的顺序对布局队列进行排序;位于树上较高位置的元素处于队列的顶部,以避免父级中的重复更改导致冗余的布局。 重复条目将自动从队列中移除,如果元素已经过布局验证,则元素也会自动从队列中移除。

更新布局时,首先清空 Measure 队列,然后清空 Arrange 队列。 如果 Measure 队列中有元素,就绝不会排列 Arrange 队列中的元素。

This example shows how to override the default layout behavior of the Panel element and create custom layout elements that are derived from Panel.

The example defines a simple custom Panel element called PlotPanel, which positions child elements according to two hard-coded x- and y-coordinates. In this example, x and y are both set to 50; therefore, all child elements are positioned at that location on the x and y axes.

To implement custom Panel behaviors, the example uses the MeasureOverride and ArrangeOverride methods. Each method returns the Size data that is necessary to position and render child elements.


public class PlotPanel : Panel
{
    // Default public constructor
    public PlotPanel()
        : base()
    {
    }

    // Override the default Measure method of Panel
    protected override Size MeasureOverride(Size availableSize)
    {
        Size panelDesiredSize = new Size();

        // In our example, we just have one child. 
        // Report that our panel requires just the size of its only child.
        foreach (UIElement child in InternalChildren)
        {
            child.Measure(availableSize);
            panelDesiredSize = child.DesiredSize;
        }

        return panelDesiredSize ;
    }
    protected override Size ArrangeOverride(Size finalSize)
    {
        foreach (UIElement child in InternalChildren)
        {
            double x = 50;
            double y = 50;

            child.Arrange(new Rect(new Point(x, y), child.DesiredSize));
        }
        return finalSize; // Returns the final Arranged size
    }
}


.NET Framework

受以下版本支持:4、3.5、3.0

.NET Framework Client Profile

受以下版本支持:4、3.5 SP1

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2

.NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求

社区附加资源

添加
显示:
© 2014 Microsoft