【问题标题】:WPF StackPanel vertical Frame full heightWPF StackPanel 垂直框架全高
【发布时间】:2013-09-05 06:55:00
【问题描述】:

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

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

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

【问题讨论】:

    标签: wpf height frame stackpanel


    【解决方案1】:

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

    根据您的要求,您可以选择DockPanel/Grid。这两个控件都允许父容器根据可用的内容“限制”其子容器的尺寸。

    在您的示例中,您已经有一个DockPanel。但是,您已将StackPanel 作为它的孩子,它是唯一没有多大意义的孩子。当您有超过 1 个子项目要放入布局时,您想尝试使用布局容器。在这种情况下,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 方法只是需要注意的好方法,并且可能在情况需要时使用。

    【讨论】:

      猜你喜欢
      • 2015-06-21
      • 2015-09-27
      • 2010-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多