一些WPF控件(如按钮)如果你不指定它的高度,它似乎会愉快地占用容器中的所有可用空间。
而有些,就像我现在需要使用的,(多行)TextBox和ListBox似乎更担心的只是占用必要的空间来容纳它们的内容,而不是更多。
如果你把这些东西放在统一网格的单元格中,它们会扩展以适应可用空间。然而,UniformGrid实例并不适用于所有情况。如果您有一个网格,其中一些行设置为* height,以在自身和其他*行之间划分高度,该怎么办?如果你有一个StackPanel,你有一个标签,一个列表和一个按钮,你怎么能让列表占用所有的空间没有被标签和按钮吃掉?
我认为这真的是一个基本的布局要求,但我不知道如何让他们填补空间,他们可以(把他们放在DockPanel并设置为填充也不工作,似乎,因为DockPanel只占用它的“子控件所需的空间)。
一个可调整大小的GUI将是相当可怕的,如果你必须玩的高度,宽度,MinHeight, MinWidth等。
可以将高度和宽度属性绑定到所占用的网格单元格吗?或者还有别的办法吗?
从Panel派生的每个控件实现了在Measure()和Arrange()中执行的不同布局逻辑:
Measure()决定面板及其每个子面板的大小
Arrange()确定每个控件呈现的矩形
DockPanel的最后一个子面板填充剩余的空间。你可以通过设置LastChild属性为false来禁用这种行为。
StackPanel询问每个子节点所需的大小,然后将它们堆叠起来。堆栈面板在每个子节点上调用Measure(),其可用大小为Infinity,然后使用子节点所需的大小。
Grid占用所有可用空间,但是,它会将每个子单元设置为所需的大小,然后在单元格中居中。
你可以通过从Panel派生,然后重写MeasureOverride()和ArrangeOverride()来实现自己的布局逻辑。
有关简单示例,请参阅本文。
从Panel派生的每个控件实现了在Measure()和Arrange()中执行的不同布局逻辑:
Measure()决定面板及其每个子面板的大小
Arrange()确定每个控件呈现的矩形
DockPanel的最后一个子面板填充剩余的空间。你可以通过设置LastChild属性为false来禁用这种行为。
StackPanel询问每个子节点所需的大小,然后将它们堆叠起来。堆栈面板在每个子节点上调用Measure(),其可用大小为Infinity,然后使用子节点所需的大小。
Grid占用所有可用空间,但是,它会将每个子单元设置为所需的大小,然后在单元格中居中。
你可以通过从Panel派生,然后重写MeasureOverride()和ArrangeOverride()来实现自己的布局逻辑。
有关简单示例,请参阅本文。