2009-09-20 43 views
6

Nesnelerin bir koleksiyonuna bağlı bir öğe denetimim var. Nesnenin sırasıyla bir metin bloğu ve metin kutusunda görüntülediğim iki özelliği (adı, değeri) vardır. Liste oldukça uzun ve iki sütun halinde göstermek istiyorum. Bu yüzden sorum şu: Eşyalarını iki sütun halinde göstermek için Itemscontrol almamın bir yolu var mı?Öğeleri bir maddede iki sütun halinde göster (WPF)

Not: Koleksiyon çalışma zamanında doldurulur ve kaç tane öğeyi göstereceğim bilmiyorum!

cevap

5

Öğeleri WrapPanel'e koymaya ve sonra panelin genişliğini öğe genişliğinin 2 katı olacak şekilde ayarladım. Bu bana keyfi sayıda eleman içeren güzel sütunlar veriyor. Öğe genişlikleriniz farklıysa, her bir öğeyi kendi Grid veya StackPanel sabit genişliğine yerleştirdim.

+0

Cevabınız için teşekkürler. Ben bunu deneyeceğim. Ancak, kullanıcı bölmeyi/pencereyi yeniden boyutlandırdığında, bunun UI'm bozulacağına dair bir şüphem var. Bunu yapmanın daha zarif bir yolu yok mu? Belki itemscontrol itemstemplate içinde bir ızgara kullanarak? –

11

Bir ListBox kullanın ve hem TextBlock hem de TextBox'ı yerleştirdiğiniz bir DataTemplate belirtin. İkisini de yerleştirmek için bağlamaları kullanın. Daha fazla örnek için bkz. http://msdn.microsoft.com/en-us/library/ms742521.aspx.

<ListBox x:Name="TheListBox"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="Auto" SharedSizeGroup="Key" /> 
        <ColumnDefinition Width="*" /> 
       </Grid.ColumnDefinitions> 

       <TextBlock Text="{Binding Name}" /> 
       <TextBox Grid.Column="1" Text="{Binding Value }" /> 
      </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

TheListBox.ItemsSource = CollectionOfObjects; 
+1

Bu modelin gerçekten kritik (ve sezgisel olmayan, ben hissediyorum) öğesi SharedSizeGroup. Sezgisel olarak "sezgisel olmayan" diyorum çünkü sezgisel olarak "Öğeleri bir ızgarada görüntülemek istiyorum" değil "Öğeleri sütunları birbirine bağımsız olarak yeniden boyutlandıran birçok ızgarada görüntülemek istiyorum. –

+9

Bunu bir ItemsControl üzerinde denediğimde bir liste kutusu), bu işi yapmak için ItemsControl: Grid.IsSharedSizeScope = "True" bir özellik ayarlamanız gerekiyordu. –