如果父控件询问其子控件“你想要多大?”,那么传递的 availableSize 参数有什么用呢?我已经通过 Reflector 查看了 StackPanel 的源代码,但仍然无法弄清楚。
如果子进程想要成为 150x30,那么即使 availableSize 是 100x20,它仍然报告 150x30,不是吗?如果希望子级将自身限制为 availableSize,那么也可以根据在子级上调用 MeasureOverride 返回的大小来完成 - 传递该参数没有意义。
有什么我没有考虑到的吗?
最佳答案
If the child wants to be 150x30, then it still reports 150x30 even if availableSize is 100x20, doesn't it?
这取决于控件,但通常答案是否定的。无论如何,重点是让它有机会将自己安装到容器中,但这不是必需的。
考虑一下 Grid 和 StackPanel 之间的区别。网格通常会根据可用大小精确调整自身大小。相比之下,StackPanel 只会在一个方向上无限地调整自身大小(取决于其方向),而不管可用大小如何。在另一个方向上,它只会将自身延伸到其子级所需的空间,除非其“HorizontalAlignment”/“VerticalAlignment”设置为“Stretch”,在这种情况下,它将自身延伸到该子级中的可用大小。方向。
ViewBox是一个更复杂的示例,充分利用了“availableSize”。它通常根据可用空间调整自身大小,并根据“Stretch”和“StretchDirection”的值缩放/拉伸(stretch)其子项。
关于c# - 为什么MeasureOverride会收到availableSize?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23574264/