WPF StackPanel 垂直布局 充满高度的 Frame

7
我需要用stackpanel(框架)中的最后一个元素填充空白空间:
    <DockPanel>
        <StackPanel Orientation="Vertical">
            <Frame NavigationUIVisibility="Hidden" Height="100" x:Name="_menu" />
            <Frame NavigationUIVisibility="Hidden" x:Name="_mainFrame" />
        </StackPanel>
    </DockPanel>

_mainFrame - 填补从_menu框架到底部的空白空间

1个回答

7
StackPanel不是允许元素“填充剩余空间”的布局容器。 StackPanel在其他布局容器中具有特定的目的。它的作用是将项目垂直/水平“堆叠”,并根据其子项所需的高度而工作,而不是可用的高度。 它将允许其子项获得他们想要的任意空间。

对于您的要求,您需要选择一个DockPanel/Grid。这两个控件都将允许父容器基于可用空间“限制”其子元素的尺寸。

在您的示例中,您已经有了一个DockPanel。但是您将一个StackPanel放置为其子级,并且它是唯一的孩子,这没有多少意义。当您需要将多个子项放入布局时,您想尝试使用布局容器。在这种情况下,StackPanelDockPanel的唯一子项。

要通过使用DockPanel来满足您的需求,您可以选择以下内容:

<DockPanel>
    <Frame NavigationUIVisibility="Hidden" Height="100" x:Name="_menu" DockPanel.Dock="Top" />
    <Frame NavigationUIVisibility="Hidden" x:Name="_mainFrame" />
</DockPanel>

DockPanel 默认使用 LastChildFill="True",因此声明中的第二个项将被拉伸以填充剩余可用空间,这正是您所需要的。如果将此属性设置为 false,则不会拉伸它。

要使用 Grid 实现相同的效果:

<Grid>
  <Grid.RowDefinitions>
      <RowDefinition Height="Auto"/>
      <RowDefinition Height="*"/>
  </Grid.RowDefinitions>
  <Frame NavigationUIVisibility="Hidden" Height="100" x:Name="_menu" />
  <Frame NavigationUIVisibility="Hidden" x:Name="_mainFrame" Grid.Row="1" />
</Grid>

根据您的要求,我更倾向于使用 DockPanel,而 Grid 方法只是值得了解,在需要时才使用比较好。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接