对于我自己来说,如果 MeasureOverride 计算 FrameworkElement 和 ArrangeOverride 只是位置的大小,那将是合乎逻辑的儿童元素。但 ArrangeOverride 不仅会安排子元素。它还会再次计算 FrameworkElement 的大小,我不明白。为什么 MeasureOverride 计算最终尺寸呢?
答案 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 ()通过。