2010-05-28 21 views
25

Her zaman bir Stackpanel gibi bir dinamik düzen denetiminde bir ListView ile ilgili sorunlar yaşıyorum.Kalan alanı almak için boş WPF ListView

Şu anda Root-Control olarak bir Stackpanel içeren bir Pencerem var. Stackpanel mükemmel bir şekilde streches ve tüm pencereyi alır. StackPanel'in içinde metin kutuları ve düğmeler gibi diğer bazı denetimler düzgün ayarlanmış.

Son Nesne bir ListView'dir. ListView'ın StackPanel'den kalan alanı almasını istiyorum, ancak bunu yapmıyor. VerticalAlignment = "Stretch" ile bile sadece sütun başlıklarını alıyorum. ListView sadece öğeler eklendiğinde büyür. Bu yüzden ListView yüksekliğini manuel olarak ayarlamalıyım.

ListView'in boş olduğunda bile bir StackPanel'de kalan alanı doldurmasını nasıl sağlayabilirim?

+0

Bazı XAML yayınlayabilir misiniz? – zendar

cevap

30

Bunun ListView ile ilgisi yoktur. StackPanel'in "hatası" dır. Bir StackPanel'de, alt öğeleri her zaman yalnızca ihtiyaç duydukları alanı kullanır (StackPanel'in yönlendirmesi yönünde). StackPanel bu şekilde tasarlanmıştır. Bunun yerine bir DockPanel kullanın, burada son öğe LastChildFill="true" (true varsayılandır, bu nedenle açıklık gerektirmez) kullanılarak kalan tüm alanı doldurun.

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

Bir kılavuz nasıl kullanılır? Izgaralar bu tarz bir düzen için yapılır. DockPanel de iyi bir öneridir.

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

önemli parçası Yüksekliğidir = "*", bu mevcut tüm yer kaplar için satır söyler bunu varsayılan davranıştır olarak isterseniz bunu bırakabilir.