Stretch empty WPF ListView to take the remaining space

后端 未结 2 1207
渐次进展
渐次进展 2021-02-06 22:23

I always have problems with a ListView inside a dynamic layout control like a Stackpanel.

Right now I have a Window with a Stackpanel as Root-Control. The Stackpanel str

相关标签:
2条回答
  • 2021-02-06 22:57

    How about using a grid? Grids are made for this kind of layout. The DockPanel is a good suggestion too.

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

    The important part is the Height="*", this tells the row to take up all available space, you can leave this out if you want as it is the default behaviour.

    0 讨论(0)
  • 2021-02-06 23:14

    This has nothing to do with the ListView. It is the StackPanel's "fault". In a StackPanel the child items always consume only the space they need (in the direction of the orientation of the StackPanel). That's how the StackPanel is designed. Use a DockPanel instead, there you can make the last item fill up all the space that is left over using LastChildFill="true" (true is default, so no need to explicity specify it).

    <DockPanel Background="Green">
        <Button DockPanel.Dock="Top">Text</Button>
        <ListView DockPanel.Dock="Top">
            <ListView.View>
                <GridView>
                    <GridViewColumn/>
                </GridView>
            </ListView.View>
        </ListView>     
    </DockPanel>
    
    0 讨论(0)
提交回复
热议问题