拉伸空WPF ListView以占用剩余空间

Tal*_*ode 31 wpf layout listview

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

现在我有一个带有Stackpanel的Window作为Root-Control.Stackpanel完美地拉伸并占据整个窗口.在StackPanel内部还有一些其他控件,如文本框和按钮,所有对齐都很好.

最后一个Object是ListView.我希望ListView从StackPanel中获取剩余的空间,但它没有.即使使用VerticalAlignment ="Stretch",我也只能获得列标题.ListView仅在项目添加到项目时才会增长.所以我必须手动设置ListView高度.

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

bit*_*onk 37

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


Lee*_*eil 17

使用网格怎么样?网格是为这种布局而制作的.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>
Run Code Online (Sandbox Code Playgroud)

重要的部分是Height ="*",它告诉行占用所有可用空间,如果你想要它可以保留它,因为它是默认行为.