将空的WPF ListView 拉伸以占据剩余空间

41

我总是在像Stackpanel这样的动态布局控件中遇到ListView的问题。

现在我有一个窗口,其中根控件是Stackpanel。Stackpanel可以完美地伸展并占据整个窗口。StackPanel内部有一些其他控件,如文本框和按钮,都对齐得很好。

最后一个对象是ListView。我希望ListView可以占用StackPanel的剩余空间,但实际上并没有。即使使用了VerticalAlignment="Stretch",我只能看到列标题。只有在向其中添加项时,ListView才会增长。所以我必须手动设置ListView的高度。

如何使ListView填充StackPanel中的剩余空间,即使它为空?

2个回答

48

这与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>

18

使用网格布局怎么样?网格是用来进行这种布局的。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="*",它告诉行占用所有可用空间,如果您愿意,可以将其省略,因为这是默认行为。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接