有人可以解释一下Child.Measure(availableSize)在silverlight中的作用吗?

时间:2010-03-11 00:49:41

标签: c# wpf silverlight

    protected override Size MeasureOverride(Size availableSize)
    {

        foreach (UIElement child in Children)
        {
            child.Measure(availableSize);
            //you get the desired size after

        }


    }

因此,为了简洁起见,我将代码缩短了,但我无法理解为什么在某些示例中,他们在获得DesiredHeight DesiredWidth属性之后将availableSize传递给孩子。 Measure实际测量的是什么,为什么我甚至不得不传递任何东西?我已经阅读了msdn并做了一些例子,仍然没有理解,或者我想的太多了。

2 个答案:

答案 0 :(得分:1)

控件在WPF中作为树结构(VisualTree)进行布局。 'Panel'是一种控件,可以在其中包含许多子UIElements,换句话说,Panels用作WPF / Silverlight中的LayoutSystem。给定面板的框架是StackPanel,Grid,Canvas等。如果从Panel派生一个类并覆盖MeasureOverride()和ArrangeOverride(),您将能够制作自定义面板。

现在回答这个问题。在自定义面板或控件中,您可以调用child.Measure(availableSize)让所有下一级别的孩子知道'available'size是'孩子'现在拥有的东西。并有机会决定适合的子元素。这就像我告诉我的孩子们,这是我们决定你的尺寸的空间。因此,一旦控件调用Measure(),它就会将其传递给后续的子节点,并且每个控件都会调用自己的measure()直到VisualTree结束,一旦调用结束,您将能够看到孩子想要的所需大小.DesiredSize。既然你得到了所有孩子们想要的尺寸,你就可以计算控制的期望尺寸并在MeasureOverride()函数结束时返回它

布局机制在两个过程中进行测量和排列。一旦您使用可用尺寸测量您的孩子,您可以安排您的孩子,因为在那个设施,您将知道每个孩子需要的孩子大小.DesiredSize

答案 1 :(得分:0)

我从阅读文档的猜测是,AvailableSize用于约束构成目标控件的底层控件的大小。这样,如果可用尺寸很小,或者只能增长到最大尺寸(无论目标区域有多大),它们都会崩溃。

如果你不能适应可用区域,那么在这种情况下也可能出现“错误”,尽管它的用处可能有限。