2014-01-07 139 views
7

我在ItemsControl中顯示List<string>集合。問題在於列表項之間沒有間隔TheyAreAllNextToEachOther。WPF中的項目間距ItemsControl

如何在物品之間創建一些間距?

<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

只是爲了讓你知道目前提供的兩個答案的區別, 「ItemContainerStyle」是'item容器'的'Style',或者如果你使用的是'ListBox',則是'ListBoxItem'。 'ItemTemplate'是一個'DataTemplate',它定義了項目的「內容」應該是什麼樣子。因此,在'ItemContainerStyle'中,您可以訪問容器的屬性(例如ListBoxItem.IsSelected)並在'DataTemplate'中訪問數據項的公共類屬性。 – Sheridan

回答

3

你設置保證金

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

雖然這確實起作用,並且與其他幾乎所有其他解決方案類似,但它並不理想。如果只有一個項目,則不需要增加間距,並且第一個和最後一個項目總是會有額外的空間。這也意味着每個元素的有效間距爲6,因爲前一個元素的邊距總是3。 – Julien

+0

如果要間距爲3,則可以將左右邊距設置爲1.5 ...只是說 – sam

+1

如果您只是希望沒有項目控件的外部間距的間隙,請爲項目面板設置負邊距,等於邊距的正邊距項目:'在這個答案中,項目間隔爲6. – grek40

40

提供樣式到您的ItemsControl的容器我想補充一個ItemTemplate(默認ContentPresenter)這樣,你可以設置的空白說5:

<ItemsControl> 
     <ItemsControl.ItemContainerStyle> 
      <Style> 
       <Setter Property="FrameworkElement.Margin" Value="5"/> 
      </Style> 
     </ItemsControl.ItemContainerStyle> 
    </ItemsControl> 
相關問題