6

我需要用堆栈面板(框架)中的最后一个元素填充空白空间:

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

_mainFrame - 填充 _menu Frame 到底部的空白空间

4

1 回答 1

7

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

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

在您的示例中,您已经有一个DockPanel. 但是,您已将 a StackPanelas it's child 放置为唯一没有多大意义的孩子。当您有多个子项要放入布局时,您想尝试使用布局容器。在这种情况下,StackPanel 是DockPanel.

要通过使用 a 来满足您的要求DockPanel,您可以使用,

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

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

用 a 做同样的事情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方法只是需要注意的好东西,并且可能在情况需要时使用。

于 2013-09-02T08:33:19.800 回答