不会一直调用MeasureOverride对子项的属性更改

时间:2013-12-24 21:06:31

标签: wpf silverlight measureoverride

我写了一个类似于内置StackPanel的面板。除了一个小问题我工作得很好:

更改子项的布局属性并不总是会导致调用面板的MeasureOverride和ArrangeOverride。当孩子的Visibility属性发生变化时, 总是被调用,而当Width和Height属性发生变化时,不是

我还没有设法在一个足够小的样本中重现这种行为以适合包含在StackOverflow上的问题中:但是因为它在我制作的简单样本中工作正常,我知道我必须做一些可以避免的事情我的实际小组。

所以我的问题:在更改与尺寸相关的属性时,元素在哪些情况下不会使其父项无效?

我也标记了这个wpf(我使用Silverlight)来拥有更广泛的受众 - 我怀疑这将同样适用于两个xaml实现。

2 个答案:

答案 0 :(得分:0)

我知道我的错误是什么,在哪种情况下,面板的MeasureOverride不再被调用与尺寸相关的属性的某些更改。

我的小组名为“测量儿童应该具有的确切尺寸的儿童”,而不是面板的尺寸。

当一个小组开始想要比在上一次测量调用中告诉他们更多的空间时,面板不会得到它的MeasureOverride方法 - 这是有道理的。

摘要:您在子项上调用的Measure方法的参数必须表示父面板分配给所有子项的空间,而不仅仅是调用一个Measure。

答案 1 :(得分:-1)

您必须确保调用基本方法MeasureOverride。

    protected override Size MeasureOverride(Size availableSize)
    {
        // you must call this
        var throwaway = base.MeasureOverride(availableSize);

        // your code here

        return yourNewSize;
    }