WPF StackPanel垂直框架全高

Nik*_*laj 6 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>
Run Code Online (Sandbox Code Playgroud)

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

Viv*_*Viv 6

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

根据您的要求,您需要使用DockPanel/ Grid.这两个控件都允许父容器根据可用内容"限制"子容器的维度.

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

要通过使用a获得您的要求DockPanel,您可以使用,

<DockPanel>
    <Frame NavigationUIVisibility="Hidden" Height="100" x:Name="_menu" DockPanel.Dock="Top" />
    <Frame NavigationUIVisibility="Hidden" x:Name="_mainFrame" />
</DockPanel>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

对于你的要求,我宁愿选择DockPanel,这个Grid方法只是一个很好的注意事项,并可能在情况需要时使用.