2014-01-07 12 views
7

Ich zeige eine List<string> Sammlung in einem ItemsControl. Das Problem besteht darin, dass zwischen den Listenelementen TheyAreAllNextToEachOther kein Abstand besteht.Artikelabstand in WPF ItemsControl

Wie kann ich einen Abstand zwischen den Elementen erstellen?

<ItemsControl Grid.Column="2" 
     Grid.ColumnSpan="2" 
     ItemsSource="{Binding Path=ShowTimes}" 
     BorderThickness="0"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapPanel IsItemsHost="True" Orientation="Horizontal"/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
</ItemsControl> 
+4

Nur damit Sie den Unterschied zwischen den beiden Antworten wissen, die Sie zur Zeit erhalten haben 'ItemContainerStyle' ist ein' Style' für den 'item container' oder das 'ListBoxItem' wenn Sie eine' ListBox' verwenden. Die 'ItemTemplate' ist eine' DataTemplate', die definiert, wie der 'Inhalt' der Elemente aussehen soll. Daher können Sie im 'ItemContainerStyle' auf Eigenschaften des Containers (zB ListBoxItem.IsSelected) zugreifen und in der 'DataTemplate' können Sie auf die öffentlichen Klasseneigenschaften des Datenelements zugreifen. – Sheridan

Antwort

3

Ich würde eine ItemTemplate hinzufügen, wo Sie den Rand gesetzt

<ItemsControl.ItemTemplate> 
    <DataTemplate> 
     <TextBlock Margin="3,3,3,3" Text="{Binding}"/> 
    </DataTemplate> 
</ItemsControl.ItemTemplate> 
+4

Während das funktioniert und ist so ziemlich jede andere Lösung da draußen, ist es nicht ideal. Wenn nur ein Element vorhanden ist, fügen Sie Leerzeichen für nichts hinzu, und das erste und das letzte Element verfügen immer über zusätzlichen Speicherplatz. Dies bedeutet auch, dass jedes Element einen effektiven Abstand von 6 hat, da das vorherige Element immer einen Spielraum von 3 hat, der bereits existiert. – Julien

+0

Wenn Sie einen Abstand von 3 haben möchten, können Sie den linken und rechten Rand auf 1,5 setzen ... nur – sam

+1

Wenn Sie nur Lücken ohne äußeren Abstand des Objektsteuerelements wünschen, setzen Sie negative Ränder auf das Objektfeld, gleich dem positiven Rand von die Elemente: '' im Falle dieser Antwort mit einer Artikellücke von 6. – grek40

40

Art Ihrem Items Behälter sammeln (Standard-Content) wie dieser, wo Sie können Set Margin 5 zu sagen:

<ItemsControl> 
     <ItemsControl.ItemContainerStyle> 
      <Style> 
       <Setter Property="FrameworkElement.Margin" Value="5"/> 
      </Style> 
     </ItemsControl.ItemContainerStyle> 
    </ItemsControl> 
Verwandte Themen