繁体   English   中英

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

[英]Stretch empty WPF ListView to take the remaining space

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

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

最后一个Object是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 =“*”,它告诉行占用所有可用空间,如果你想要它可以保留它,因为它是默认行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM