1

对我自己来说,如果MeasureOverride计算FrameworkElement的大小,而ArrangeOverride 只是定位子元素,那将是合乎逻辑的。但是ArrangeOverride不仅仅排列子元素。它还会再次计算我不明白的FrameworkElement的大小。为什么MeasureOverride不能计算最终大小,仅此而已?

4

2 回答 2

1

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

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

我之前的这个答案作为一个类比给你。

于 2014-05-04T09:16:10.853 回答
1

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

child.Arrange(rect1)

如果 rect1 与孩子的 DesiredSize 不同,那么系统可能会任意决定忽略 rect1 的大小并使用不同的东西。我见过 DesiredSize 被使用,我不确定它是否总是如此。我会说这类似于错误:)

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

于 2017-03-19T05:20:41.037 回答