WPF中ItemsControl的项目间距

17

我正在ItemsControl中显示一个List<string>集合。问题是列表项之间没有间隔,比如TheyAreAllNextToEachOther

我该如何在列表项之间创建一些间距?

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

5
为了让你了解当前提供的两个答案之间的区别,ItemContainerStyle 是 'item container' 的 Style,或者如果你使用的是 ListBox,那么它就是 ListBoxItemStyleItemTemplate 是一个 DataTemplate,它定义了项目的内容应该看起来像什么。因此,在 ItemContainerStyle 中,你可以访问容器的属性(例如 ListBoxItem.IsSelected),而在 DataTemplate 中,你可以访问数据项的公共类属性。 - Sheridan
2个回答

75

像这样为您的ItemsControl容器(默认ContentPresenter)提供样式,您可以在其中设置Margin,比如5:

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

3
我建议您添加一个ItemTemplate,其中设置margin属性。
<ItemsControl.ItemTemplate>
    <DataTemplate>
        <TextBlock Margin="3,3,3,3" Text="{Binding}"/>
   </DataTemplate>
</ItemsControl.ItemTemplate>

7
虽然这种方法可行且与其他大多数解决方案相似,但并不理想。如果只有一个项目,则添加空格没有意义,并且第一个和最后一个项目始终会有额外的空格。这也意味着每个元素具有有效间距为6,因为前一个元素始终已经存在3个边距了。 - Julien
如果您想要一个间距为3,您可以将左右边距设置为1.5...只是说一下。 - Mauro Sampietro
8
如果您只是想让控件项之间没有外部间距,可以将项目面板设置为负边距,大小等于项目的正边距: <WrapPanel IsItemsHost="True" Orientation="Horizontal" Margin="-3,-3,-3,-3"/>,这样就可以得到一个项目间隙为6的答案。 - grek40
1
不建议在实践中使用数据模板。如果您只关心边距,itemcontainer会更好。 - Wobbles

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接