我试图弄清楚为什么当我设置一个窗口来调整其内容大小,然后设置其内容以占用所有可用空间时,WPF 不会变得疯狂......有什么想法吗?
最佳答案
布局系统中有两个过程 - 测量和排列。
首先,在测量过程中,每个子级都会被赋予一个建议的可用大小,并且这会沿着树向下传播。这会设置每个子项的 DesiredSize
属性。
在接下来的排列过程中,将考虑 DesiredSize
,但父级对将给子级提供多少实际可用大小有最终决定权,并且父级放置每个子级相应地,通知它它获得的实际大小,依此类推。
此外,考虑几种可以想象的极端情况:
- 子项要求
double.Infinity
所需大小:明确不允许,引发异常 - 子级将其
HorizontalAlignment
设置为“拉伸(stretch)”:父级不提供无限的实际尺寸 - 窗口设置为
SizeToConent
,子窗口设置为“Stretch
”,未设置其他约束:- 窗口首先提供无限的度量大小
- 子级要求其子级测量的大小(文本宽度、边距等) - 不是无限大小
- 排列:窗口将其大小设置为系统定义的最小值或子级所需的大小,以较大者为准(不能是无限的)
- child 会拉伸(stretch)以适应上一步中确定的尺寸
- 窗口首先提供无限的度量大小
关于wpf - WPF 如何解决循环相关的大小调整问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1226123/