如果您不指定它的高度,某些 WPF 控件(如Button)似乎很乐意消耗其容器中的所有可用空间。
Button
还有一些,比如我现在需要使用的那些,(多行)TextBox和ListBox似乎更担心只占用必要的空间来适应它们的内容,仅此而已。
TextBox
ListBox
如果你把这些家伙放在一个单元格中UniformGrid,它们会扩展以适应可用空间。但是,UniformGrid实例并不适用于所有情况。如果您有一个网格,其中一些行设置为 * 高度以在其自身和其他 * 行之间划分高度怎么办?如果你有 a StackPanel,你有 a Label, aList和 a Button,你怎么能让列表占据标签和按钮没有吃掉的所有空间?
UniformGrid
StackPanel
Label
List
我认为这确实是一个基本的布局要求,但我不知道如何让它们填充它们可以填充的空间(将它们放入 aDockPanel并将其设置为填充也不起作用,似乎,因为DockPanel唯一占用其子控件所需的空间)。
DockPanel
如果您必须使用Height, Width,MinHeight等来调整大小的 GUI 将是非常可怕的MinWidth。
Height
Width
MinHeight
MinWidth
您可以将您的Height和Width属性绑定到您占用的网格单元吗?还是有其他方法可以做到这一点?
派生自的每个控件都实现了在和 Panel 中执行的不同布局逻辑:Measure()``Arrange()
Panel
Measure()``Arrange()
Measure()
Arrange()
的最后一个孩子 DockPanel 填充剩余的空间。LastChild您可以通过将属性设置为 来禁用此行为false。
LastChild
false
StackPanel 询问每个孩子所需的尺寸,然后将它们堆叠起来。堆栈面板调用Measure()每个子级,可用大小为Infinity,然后使用子级所需的大小。
Infinity
A Grid 占据所有可用空间,但是,它将每个孩子设置为所需的大小,然后将它们放在单元格中。
Grid
您可以通过派生Panel然后覆盖MeasureOverride()and来实现自己的布局逻辑ArrangeOverride()。
MeasureOverride()
ArrangeOverride()
有关简单示例,请参阅本文。