小编典典

如何在 WPF 中获取控件以填充可用空间?

all

如果您不指定它的高度,某些 WPF 控件(如Button)似乎很乐意消耗其容器中的所有可用空间。

还有一些,比如我现在需要使用的那些,(多行)TextBoxListBox似乎更担心只占用必要的空间来适应它们的内容,仅此而已。

如果你把这些家伙放在一个单元格中UniformGrid,它们会扩展以适应可用空间。但是,UniformGrid实例并不适用于所有情况。如果您有一个网格,其中一些行设置为 * 高度以在其自身和其他 * 行之间划分高度怎么办?如果你有 a StackPanel,你有 a Label, aList和 a
Button,你怎么能让列表占据标签和按钮没有吃掉的所有空间?

我认为这确实是一个基本的布局要求,但我不知道如何让它们填充它们可以填充的空间(将它们放入
aDockPanel并将其设置为填充也不起作用,似乎,因为DockPanel唯一占用其子控件所需的空间)。

如果您必须使用Height, Width,MinHeight等来调整大小的 GUI 将是非常可怕的MinWidth

您可以将您的HeightWidth属性绑定到您占用的网格单元吗?还是有其他方法可以做到这一点?


阅读 121

收藏
2022-04-08

共1个答案

小编典典

派生自的每个控件都实现了在和 Panel 中执行的不同布局逻辑:Measure()``Arrange()

  • Measure()确定面板及其每个子项的大小
  • Arrange()确定每个控件呈现的矩形

的最后一个孩子 DockPanel 填充剩余的空间。LastChild您可以通过将属性设置为 来禁用此行为false

StackPanel
询问每个孩子所需的尺寸,然后将它们堆叠起来。堆栈面板调用Measure()每个子级,可用大小为Infinity,然后使用子级所需的大小。

A Grid 占据所有可用空间,但是,它将每个孩子设置为所需的大小,然后将它们放在单元格中。

您可以通过派生Panel然后覆盖MeasureOverride()and来实现自己的布局逻辑ArrangeOverride()

有关简单示例,请参阅本文

2022-04-08