2010-05-28 26 views
25

Siempre tengo problemas con un ListView dentro de un control de diseño dinámico como un Stackpanel.Extender WPF ListView vacío para ocupar el espacio restante

Ahora tengo una ventana con un panel de pila 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 las columnas. 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?

+0

Puedes publicar algo de XAML. – zendar

Respuesta

30

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

¿Qué le parece 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 la altura = "*", esto le dice a la fila para ocupar todo el espacio disponible, puede dejar esto si quieres, ya que es el comportamiento por defecto.

Cuestiones relacionadas