为什么ArrangeOverride会重新计算最终大小

时间:2014-05-04 09:04:06

标签: wpf layout measureoverride arrangeoverride

对于我自己来说,如果 MeasureOverride 计算 FrameworkElement ArrangeOverride 只是位置的大小,那将是合乎逻辑的儿童元素。但 ArrangeOverride 不仅会安排子元素。它还会再次计算 FrameworkElement 的大小,我不明白。为什么 MeasureOverride 计算最终尺寸呢?

2 个答案:

答案 0 :(得分:1)

因为您的元素可能不是屏幕上唯一的元素。

布局并不那么简单。 WPF必须计算出它必须使用的实际物理空间,然后计算每个元素需要多少空间,如果可以的话,缩放请求的数量,然后应用它。此外,一些元素可能希望根据分配的确切空间量进行更改。

This previous answer of mine将它作为一个类比给你。

答案 1 :(得分:1)

如果您使用自己的布局算法并在ArrangeOverride()调用中实现自己的Panel

child.Arrange(rect1)

如果rect1与孩子的DesiredSize不同,那么系统可以任意决定忽略rect1大小并使用不同的东西。我已经看到DesiredSize正在使用,我不确定它是否总是如此。我说这是一个类似于错误的东西:)

如果在Panel的MeasureOverride()传递中计算rect1,则此行为的解决方法是在子节点上第二次调用rect1的大小调用Measure(),因此在排列之前重新计算子节点的DesiredSize ()通过。