2

我写了一个类似于内置 StackPanel 的面板。除了一个小问题,我几乎可以正常工作:

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

我还没有设法在一个足够小以适合包含在 StackOverflow 上的问题中的示例中重现此行为:但是由于它在我制作的简单示例中运行良好,我知道我必须在我的实际面板中做一些可以避免的事情.

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

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

4

2 回答 2

1

我想出了我的错误是什么,在什么情况下面板的 MeasureOverride 不再调用与大小相关的属性的某些更改。

我的小组名为 Measure on children,其大小与孩子们应该具有的确切尺寸,而不是面板的大小有关。

当孩子们开始需要比上一次 Measure 调用中告诉他们的更多空间时,面板不会调用 MeasureOverride 方法 - 这是有道理的。

总结:你在子节点上调用的 Measure 方法的参数必须表示父面板分配给所有子节点的空间,而不仅仅是调用了一个 Measure。

于 2014-01-02T13:41:50.283 回答
-1

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

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

        // your code here

        return yourNewSize;
    }
于 2013-12-25T08:58:30.590 回答