拉伸空的WPF ListView取剩余的空间

在一个动态布局控件(如Stackpanel)中,我总是遇到ListView问题。

现在我有一个带有StackPanel作为根控制的窗口。 Stackpanel完美地延伸并占据完整的窗口。 在StackPanel里面有一些其他的控件,比如文本框和按钮都很好地对齐。

最后一个对象是一个ListView。 我希望ListView从StackPanel获取剩余的空间,但它不。 即使VerticalAlignment =“Stretch”,我也只能得到列标题。 ListView只在项目添加到它时才会增长。 所以我必须手动设置ListView高度。

我怎样才能使ListView填充StackPanel的剩余空间,即使它是空的?


这与ListView无关。 这是StackPanel的“故障”。 在一个StackPanel中,子项总是只消耗它们需要的空间(在StackPanel的方向上)。 这就是StackPanel的设计。 改为使用DockPanel,您可以使用LastChildFill="true"true为默认值,因此不需要明确指定它)使最后一项填满剩余的所有空间。

<DockPanel Background="Green">
    <Button DockPanel.Dock="Top">Text</Button>
    <ListView DockPanel.Dock="Top">
        <ListView.View>
            <GridView>
                <GridViewColumn/>
            </GridView>
        </ListView.View>
    </ListView>     
</DockPanel>

如何使用网格? 网格是为这种布局而制作的。 DockPanel也是一个很好的建议。

  <Grid>  
    <Grid.RowDefinitions>
      <RowDefinition Height="Auto"/>
      <RowDefinition Height="Auto"/>
      <RowDefinition Height="*"/>
     </Grid.RowDefinitions>

   <TextBlock Grid.Row="0" Text="row1"/>
   <Button Grid.Row="1" Content="row2"/>
   <ListView Grid.Row="2">
     <ListViewItem Content="Text"/>
     <ListViewItem Content="Text1"/>
     <ListViewItem Content="Text2"/>
   </ListView>
  </Grid>

最重要的部分是Height =“*”,它告诉该行占据所有可用空间,如果你愿意,可以忽略它,因为它是默认行为。

链接地址: http://www.djcxy.com/p/50063.html

上一篇: Stretch empty WPF ListView to take the remaining space

下一篇: WPF: How to make controls stretch in a StackPanel?