WPF StackPanel垂直框架全高

时间:2013-09-02 08:20:40

标签: wpf height frame stackpanel

我需要用stackpanel(Frame)中的最后一个元素填充空格:

    <DockPanel>
        <StackPanel Orientation="Vertical">
            <Frame NavigationUIVisibility="Hidden" Height="100" x:Name="_menu" />
            <Frame NavigationUIVisibility="Hidden" x:Name="_mainFrame" />
        </StackPanel>
    </DockPanel>

_mainFrame - 从_menu Frame填充空白区域到底部

1 个答案:

答案 0 :(得分:5)

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

根据您的要求,您希望使用DockPanel / Grid。这两个控件都允许父容器根据可用内容“限制”子容器的维度。

在您的示例中,您已经拥有DockPanel。但是你已经把StackPanel作为它的孩子而且它是唯一没有多大意义的孩子。如果要将多个子项放入布局,则需要尝试使用布局容器。在这种情况下,StackPanel是DockPanel的唯一子项。

要使用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>

根据您的要求,我更愿意使用DockPanelGrid方法只是注意事项并且可能在情况需要时使用。