使中间组件在停靠面板中的其余 space 上加宽

Making middle component widen up over the remaining space in dock panel

停靠面板具有 属性,最后一个停靠的控件被分配给所有剩余的 space。这会产生以下效果:ping-ping-ping-piiiing,缺乏真实的视觉表示。

我想实现这样一种情况,即最顶部和最底部的控件被挤压,剩余的 space 分配给中间控件(或根本 none,因为window 的中间应该是空的,视觉上明显的控件将仅放置在边缘)。创建的效果将是:ping-ping-piiiing-ping.

假设 window 的所有标签、框等都在顶部(停靠在面板的顶部),底部有一堆按钮(停靠在面板的顶部)面板底部并水平右对齐),类似于消息框。

我怎样才能做到这一点?也许停靠面板需要与其他一些布局器结合使用?或者我应该完全使用不同的布局?许多年前,在 Swing 中,有这个 north/south/east/west 容器。

如果你想让最后一个元素成为 "middle" 并占据剩余的 space,你可以设置这样的布局:

<DockPanel LastChildFill="True">

    <StackPanel Orientation="Horizontal" DockPanel.Dock="Top">
      Labels, boxes
    </StackPanel>

    <StackPanel Orientation="Horizontal" DockPanel.Dock="Bottom">
      Buttons here
    </StackPanel>

    <Label></Label>        

</DockPanel>

这就是你的意思?请注意,最后一个元素(空标签)没有停靠。 如果 "last child" 表示一些可扩展的 UI 控件(或一组控件),例如 ListBox,通常会使用这种方法。


选择:

为了您的目标,您还可以设置一个包含三行的 table,并为中间一行提供所有剩余高度:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />            
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <Label Grid.Row="0">Top row</Label>
    <Label Grid.Row="2">Bottom row</Label>        
</Grid>