问题标签 [measureoverride]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
241 浏览

wpf - MeasureOverride 和 ArrangeOverride。什么是真正的 AvailableSize/DesiredSize?

我被困了两天,试图了解 WPF 的布局原则。

我已经阅读了一堆文章并探索了 wpf 源代码。

我知道 measure/measureoverride 方法接受一个可用大小,然后设置 DesiredSize 属性。这是有道理的。它递归地调用孩子并要求他们设置各自所需的大小。

有两件事(至少)我不明白。让我们考虑一个 WrapPanel。

  • 查看 WPF 源代码,MeasureOverride() 方法接受一个可用大小,然后将其传递给所有子级。然后它返回子元素中生成的期望大小属性的最大宽度最大高度。它不应该在孩子之间划分可用空间吗?我认为它会遍历孩子,然后测量第一个,然后从总可用大小中减去得到的期望大小,这样下一个孩子就可以占用更少的空间。当我阅读 WPF 时,WrapPanel.MeasureOverride 似乎没有设置适合所有孩子的所需大小。它只是给出了任何一个孩子都适合的 DesiredSize。
  • 由于 wrappanel 的性质,我希望对于垂直方向的 stackpanel,高度限制会导致更宽的 DesiredSize(以适应更多列)。由于高度限制会影响包装面板的所需大小,因此该逻辑不属于 MeasureOverride 方法吗?为什么堆叠那么只反映在 ArrangeOverride 方法中?

我想我对这两种方法的机制有一些基本的误解。

谁能给我一个 DesiredSize 和/或 AvailableSize 的口头描述,使这个实现有意义?