子元素可以要求更多空间。父元素是否尊重这一点取决于父元素。
MeasureCore 只调用 MeasureOverride this
。你只了解了故事的一小部分。布局系统从调用元素树Measure
的最顶层开始,它调用. 但是,在几个地方的电话中。Panel
MeasureCore
this
MeasureCore
FrameworkElement
MeasureOverride
您在哪里看到它介于 0 和 availableSize 之间?
编辑:回复:“好吧,MeasureCore的最后一行......”
就像我说的,你看到的只是一小部分。
- 所有控件都有一种非常常见的方式来请求比实际需要更多的空间:
Margin
. 您必须编写一个自定义控件来请求比这更多的空间。
MeasureCore
据我所知,您在 中看到的约束与MinWidth
/MinHeight
和MaxWidth
/MaxHeight
限制(如果已设置)有关。
所以是的,一个控件——就像文档说的那样——可以请求比需要更多的空间。除了它们的 s 之外,似乎没有一个默认控件这样做Margin
,并且面板等容器不必尊重它。大多数情况下都不会利用您在文档中阅读的内容,因为在大多数情况下,从孩子父母的角度来看,这都是没有意义的。
如果您创建了 a UserControl
,摆脱了 XAML 中的Width
andHeight
值并覆盖MeasureOverride
以返回任意Size
,然后将它的实例放在 a 中Canvas
,您会看到它显示在Size
您返回的位置。
如果您正在创建自定义面板和自定义控件或用户控件,则布局系统的此功能可能有用,否则可能不会。但它就在那里。文档是正确的。