2010-05-28 10 views
25

Ich habe immer Probleme mit einem ListView in einem dynamischen Layout-Steuerelement wie einem Stackpanel.Leere WPF-ListView strecken, um den verbleibenden Platz zu nehmen

Im Moment habe ich ein Fenster mit einem Stackpanel als Root-Control. Das Stackpanel streckt sich perfekt und nimmt das komplette Fenster ein. Innerhalb des StackPanels sind einige andere Steuerelemente wie Textfelder und Schaltflächen alle gut ausgerichtet.

Das letzte Objekt ist ein ListView. Ich möchte, dass die ListView den verbleibenden Speicherplatz vom StackPanel übernimmt, aber nicht. Sogar mit VerticalAlignment = "Stretch" Ich bekomme nur die Spaltenüberschriften. Die ListView wächst nur, wenn Elemente hinzugefügt werden. Also muss ich die ListView Höhe manuell einstellen.

Wie kann ich den ListView füllen den verbleibenden Platz in einem StackPanel, auch wenn es leer ist?

+0

Können Sie einige XAML veröffentlichen. – zendar

Antwort

30

Das hat nichts mit dem ListView zu tun. Es ist der "Fehler" des StackPanels. In einem StackPanel verbrauchen die untergeordneten Elemente immer nur den Platz, den sie benötigen (in der Richtung der Ausrichtung des StackPanel). So ist das StackPanel konzipiert. Verwenden Sie stattdessen ein DockPanel. Dort können Sie festlegen, dass das letzte Element den gesamten verbleibenden Platz füllt, indem Sie LastChildFill="true" verwenden (true ist Standard, es muss also nicht explizit angegeben werden).

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

Wie wäre es mit einem Gitter? Gitter sind für diese Art von Layout gemacht. Das DockPanel ist auch ein guter Vorschlag.

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

Der wichtige Teil die Höhe ist = „*“, das die Zeile sagt alle verfügbaren Platz zu nehmen, können Sie dies auslassen, wenn Sie wie es wollen das Verhalten Standard ist.

Verwandte Themen