如果父控件问其子级“您想成为多大?”,那么传递的availableSize参数有什么用?我已经通过Reflector窥视了StackPanel的源代码,但我仍然无法弄清楚。
如果孩子希望是150x30,那么即使availableSize是100x20,它仍然会报告150x30,不是吗?而且,如果希望子项将自身限制为availableSize,那么也可以对子项调用MeasureOverride返回的大小来完成操作-没有必要传递该参数。
有没有我没有考虑的东西?
最佳答案
如果孩子希望是150x30,那么即使availableSize是100x20,它仍然会报告150x30,不是吗?
这取决于控件,但通常答案是否定的。在任何情况下,关键是使它有机会自己适应容器,但并非必须如此。
考虑一下网格和StackPanel之间的区别。网格通常会将自己精确地调整为可用大小。相比之下,无论可用大小如何,StackPanel都将仅在一个方向(取决于其方向)上无限地调整自身大小。在另一个方向上,除非“ HorizontalAlignment” /“ VerticalAlignment”设置为“ Stretch”,否则它只会扩展到其子级所需的空间,在这种情况下,它将自行扩展到可用的大小方向。
ViewBox是一个更复杂的示例,充分利用了“ availableSize”。它通常将自身调整为可用空间的大小,并根据“ Stretch”和“ StretchDirection”的值缩放/拉伸其子级。