visual template studio que net ejemplo wpf listview layout

template - Estirar WPF ListView vacío para tomar el espacio restante



wpf listview grouping (2)

¿Qué tal usar una grilla? Las rejillas están hechas para este tipo de diseño. El DockPanel es una buena sugerencia también.

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

La parte importante es Height = "*", esto le dice a la fila que tome todo el espacio disponible, puede dejar esto fuera si lo desea, ya que es el comportamiento predeterminado.

Siempre tengo problemas con un ListView dentro de un control de diseño dinámico como un Stackpanel.

Ahora mismo tengo una ventana con un Stackpanel como Root-Control. El Stackpanel se estira perfectamente y toma la ventana completa. Dentro del StackPanel hay otros controles, como cuadros de texto y botones, todos perfectamente alineados.

El último objeto es un ListView. Quiero que ListView tome el espacio restante del StackPanel pero no es así. Incluso con VerticalAlignment = "Stretch" solo obtengo los encabezados de columna. ListView solo crece cuando se le agregan elementos. Así que tengo que establecer la altura ListView manualmente.

¿Cómo puedo hacer que ListView llene el espacio restante en un StackPanel incluso cuando está vacío?


Esto no tiene nada que ver con ListView. Es el "error" de StackPanel. En un StackPanel, los elementos secundarios siempre consumen solo el espacio que necesitan (en la dirección de orientación del StackPanel). Así es como está diseñado el StackPanel. Use un DockPanel en su lugar, allí puede hacer que el último elemento llene todo el espacio que sobra usando LastChildFill="true" ( true es el valor predeterminado, por lo que no es necesario especificarlo explícitamente).

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