对于我自己来说,如果MeasureOverride计算FrameworkElement的大小,而ArrangeOverride 只是定位子元素,这将是逻辑的。但是ArrangeOverride不只是排列子元素。它还计算了一次FrameworkElement的大小,我不明白。为什么MeasureOverride不能计算最终的大小,就这样?
发布于 2014-05-04 09:16:10
因为您的元素可能不是屏幕上唯一的元素。
布局没那么简单。WPF必须计算出它必须使用的实际物理空间,然后计算每个元素需要多少空间,如果可以的话缩放所请求的数量,然后应用它。此外,一些元素可能希望根据所分配的空间的确切数量进行更改。
This previous answer of mine给你打了个比方。
发布于 2017-03-19 05:20:41
如果您使用自己的布局算法并在ArrangeOverride()调用中实现自己的面板
child.Arrange(rect1)如果rect1与子DesiredSize不同,那么系统可能会任意决定忽略rect1大小,并使用不同的东西。我见过DesiredSize被使用过,我不确定是否总是这样。我想说,这是一种类似于bug的东西:)
如果rect1是在面板的MeasureOverride()传递中计算的,那么这种行为的解决方法是第二次对子节点调用MeasureOverride(),传递rect1大小,因此在传递rect1()之前重新计算子级的DesiredSize。
https://stackoverflow.com/questions/23454425
复制相似问题