首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么MeasureOverride会接收availableSize?

为什么MeasureOverride会接收availableSize?
EN

Stack Overflow用户
提问于 2014-05-09 21:27:48
回答 3查看 189关注 0票数 2

如果父控件问其子控件“您希望有多大?”,那么传递的availableSize参数有什么用?我已经通过Reflector窥视了StackPanel的源代码,但我仍然无法弄清楚。

如果孩子想要150 x30,那么即使availableSize是100 x20,它仍然报告150 x30,不是吗?如果期望子对象将自己限制在availableSize上,那么最好在调用子MeasureOverride时返回的大小上这样做--传递该参数没有任何意义。

有什么我没考虑到的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-09 21:43:04

如果孩子想要150 x30,那么即使availableSize是100 x20,它仍然报告150 x30,不是吗?

这取决于控制,但总体上答案是否定的。无论如何,重点是让它有机会适合自己的容器,但它不需要这样做。

考虑一下网格和StackPanel之间的区别。网格通常会将自己精确地调整到可用的大小。相反,StackPanel只在一个方向上无限地调整自身大小(取决于它的方向),而不考虑可用的大小。在另一个方向上,它只会扩展到其子程序所需的空间,除非它的"HorizontalAlignment“/ "VerticalAlignment”设置为“拉伸”,在这种情况下,它将扩展到该方向上的可用大小。

ViewBox是一个更复杂的示例,它很好地利用了"availableSize“。它通常根据可用空间来调整自身大小,并根据“拉伸”和"StretchDirection“的值来缩放/扩展其子级。

票数 3
EN

Stack Overflow用户

发布于 2014-05-09 21:35:22

关键是要让元素有机会正确地调整自己的大小。毕竟,如果父控件不尊重可用的大小,它可能会剪短它。

票数 0
EN

Stack Overflow用户

发布于 2015-01-17 08:12:31

必须区分以下几种可能性:

容器

  • 容器具有无限大小(ScrollViewer),或者想知道子容器需要多少空间。在本例中,availableSize在MeasureOverride()中是无限的。
  • 集装箱的尺寸有限。在本例中,availableSize在MeasureOverride()中是有限的大小。

儿童

  • 子容器可以调整到容器大小。在这种情况下,如果availableSize不是无限的,则返回availableSize。如果它是无限的,而Child不能单独计算大小,则可以返回0。
  • 孩子的尺寸是固定的。在这种情况下,它不关心availableSize,而是返回固定大小。

同样的情况在ArrangeOverride(Size arrangeBounds)中再次发生,尽管大小可能不同。因此,不要使用在MeasureOverride()中计算的值,而是在ArrangeOverride()中重新计算它们。

arrangeBounds不可能是无限的。容器传递的不是无穷大,而是传递在其安排()方法中计算出来的可用大小。孩子仍然可以使用不同的尺寸。如果它太大了,容器就会把它夹起来。如果它太小,容器需要对齐它(ContentAlignment)。

如果控件(容器、子控件)的大小是固定的,那么也取决于诸如宽度、MinWidth、MaxWidth、HorizontalAlignment等属性。根据这些设置,控件要求在某些参数组合中使用固定大小,而在另一些参数组合中,控件可以根据可用大小进行调整。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23574264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档