c# - 为什么MeasureOverride会收到availableSize?

标签 c# wpf

如果父控件询问其子控件“你想要多大?”,那么传递的 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 只会在一个方向上无限地调整自身大小(取决于其方向),而不管可用大小如何。在另一个方向上,它只会将自身延伸到其子级所需的空间,除非其“Horizo​​ntalAlignment”/“VerticalAlignment”设置为“Stretch”,在这种情况下,它将自身延伸到该子级中的可用大小。方向。

ViewBox是一个更复杂的示例,充分利用了“availableSize”。它通常根据可用空间调整自身大小,并根据“Stretch”和“StretchDirection”的值缩放/拉伸(stretch)其子项。

关于c# - 为什么MeasureOverride会收到availableSize?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23574264/

相关文章:

c# - Q : SignalR authentication with . NET 客户端在本地工作但在服务器上不工作

c# - 为什么 Marshal.DestroyStructure 被认为是 Pure?

c# - WPF 共享资源问题 - 没有 App.xaml,没有共享资源

具有许多控件的 WPF UserControl - 如何创建映射到许多控件的依赖属性?

wpf - 我仍然没有得到 MVVM!

c# - Linq 帮助 - Sql trace 返回结果,但 datacontext 返回 null

c# - 在 ASP.NET MVC 中通过子操作设置页面标题

c# - 在 ASP .NET c# 中使用 JQuery 进行 Ajax

c# - 消息框弹出不止一次

.net - 如何从 WPF 应用程序中的标准输入读取内容?