2016-04-07 14 views
1

WPF kullanarak bir sütun grafik oluşturmaya çalışıyorum. Y ekseni için kontrolde görüntülemek istediğim bir değerler listem var.ListView öğelerinin tüm mevcut yüksekliklerini nasıl alabilirim?

Koleksiyona bağlı bir ListView sahibim. Öğeleri liste görünümündeki tüm uzunluk boyunca yayılmayı nasıl başarabilirim? Ve bunun için ListView doğru kontrol nedir? ben şu anda buna sahip olarak Solda

<ListView Grid.Row="1" Grid.Column="1" Grid.RowSpan="2" 
      ItemsSource="{Binding YAxisValues}" 
      Background="Gray" VerticalContentAlignment="Stretch"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <Label Content="{Binding Path=Value}" 
         Foreground="White" 
         HorizontalAlignment="Left" 
         FontSize="12" Width="50"/> 
      </StackPanel> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

Desired ListView

liste görünümüdür: Burada

benim Xaml bir örneğidir. Sağ tarafta istediğim sonuç var.

Oraya gitmek için ListView'umu nasıl değiştirebilirim? Yoksa tamamen farklı bir kontrol kullanmam gerekiyor mu?

+0

böyle bir 'ViewBox' etiketi sarma deneyin ViewBox içerisinde ListView koyardı –

+0

@NorbertKovacs Korktuğum sonucu değiştirmedi. – Timmoth

+1

@Timmoth, başka bir düşünce: 'ListView' listeden öğeleri seçmenize izin veriyor. Seçime ihtiyacınız yoksa 'ListView' yerine' ItemsControl' aynı başarı ile çalışmalıdır – ASh

cevap

2

ItemsPanel ürün ListView tüm öğeler için yeterli yüksekliğe sahip olmadığında

<ListView Name="Axis" Grid.Row="1" Grid.Column="1" Grid.RowSpan="2" 
     ItemsSource="{Binding YAxisValues}" 
     Background="Gray" VerticalContentAlignment="Stretch"    
     ScrollViewer.VerticalScrollBarVisibility="Disabled"> 
    <ListView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <UniformGrid Columns="1"/> 
     </ItemsPanelTemplate> 
    </ListView.ItemsPanel> 
    <ListView.ItemTemplate> 
     <!--no changes--> 
    </ListView.ItemTemplate> 
</ListView> 

bir sorun olabilir eşit yükseklik olsun kullandı. `<= "{Binding Path = Değer}" Ön plan = "Beyaz"/ Etiket İçerik> ` : Bu durumda ben

+0

Mükemmel! Tam ihtiyacım olan şey. Benim durumumda, bir 'ListBox'un alanını doldurmak için yeterli öğe yoksa, o zaman' UniformGrid' öğeleri ekstra alanı paylaşma yeteneğini verir. Kaydırma çubuğunun görünmesi için yeterli öğe bulunması durumunda, her öğenin yüksekliği istenen minimum boyuta gider. Kudos! –

0

Öğeler için değerini Stretch olarak ayarlayın. UniformGrid ile

 <ListView> 
      <ListView.ItemContainerStyle> 
       <Style TargetType="ListViewItem"> 
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
       </Style> 
      </ListView.ItemContainerStyle> 
     </ListView> 
+0

Ürünlerin dikey olarak olabildiğince fazla yer kaplamasını istiyorum. Ancak bu çözüm, görebildiğim kadarıyla değişmez. (VerticalContentAlignment'i ayarlarken bile) – Timmoth

+0

Eğer 'VerticalContentAlignment' olarak değiştirirseniz ve 'ListView.ItemsPanel 'öğesini' UniformGrid' olarak değiştirirseniz, bunu düzeltmeniz gerekir, ki bu asıl olarak ASh'ın cevabıdır. Farkı, 'ListView' veya 'ListView.ItemContainerStyle' üzerinde 'VerticalContentAlignment' ayarlayıp ayarlamanızın önemli olmadığıdır. –

İlgili konular