.net 在WPF/Silverlight列表框中的项目之间添加空格,在第一个上方或最后一个下方不留空格

.net 在WPF/Silverlight列表框中的项目之间添加空格,在第一个上方或最后一个下方不留空格,.net,wpf,silverlight,xaml,listbox,.net,Wpf,Silverlight,Xaml,Listbox,是否有标准/最佳方法在WPF列表框中分隔项目,以便在连续项目之间留有空格,但不在第一个项目上方或最后一个项目下方 对我来说,添加间距最明显的方法是修改ItemTemplate,使其包含每个项目上方、下方或上方和下方的空间。当然,这意味着第一个和/或最后一个项目或单个项目的上方/下方也会有空间 我可以使用触发器为第一个、最后一个和中间项选择不同的模板,但我想知道是否有我遗漏的更简单的东西——控制间距似乎是一个常见的要求 谢谢 注意:我在WPF中工作,但是假设这在Silverlight XAML中是

是否有标准/最佳方法在WPF
列表框
中分隔项目,以便在连续项目之间留有空格,但不在第一个项目上方或最后一个项目下方

对我来说,添加间距最明显的方法是修改
ItemTemplate
,使其包含每个项目上方、下方或上方和下方的空间。当然,这意味着第一个和/或最后一个项目或单个项目的上方/下方也会有空间

我可以使用触发器为第一个、最后一个和中间项选择不同的模板,但我想知道是否有我遗漏的更简单的东西——控制间距似乎是一个常见的要求

谢谢


注意:我在WPF中工作,但是假设这在Silverlight XAML中是相似的,如果不相同的话。

我要做的是,在ListBox控件模板上提供负边距,并为DataTemplate/ItemContainerStyle提供相同的边距。在第一个和最后一个项目中形成空间。检查下面的XAML。相反,我在DataTemplate中设置了按钮(ListBoxItem)本身的边距



您可以使用
样式选择器
并将其分配给
ItemContainerStyleSelector
属性。在样式选择器中,您只需根据项目是第一个、最后一个还是其他项目选择不同的样式即可

+1谢谢;这是一个很好的解决方案;当唯一的样式差异是周围的空白时,这比我想要的要多。我喜欢这个解决方案的简单性,但使用负边距会影响相邻控件的布局(在我的例子中,是切断文本内容)。相反,我在
列表框
上使用了负的顶部和底部
填充
,效果很好。负填充的想法有点违反直觉,但它提供了一个非常直接和简单的解决方案。是的,你需要使它正确,我只是展示了一个不太费力的想法。无论您希望为子元素提供多少上下边距,请在ListBox.ControlTemplate visual上提供相同但为负数的边距。
   <Windows.Resources> 
     <ControlTemplate x:Key="ListBoxControlTemplate1" TargetType="{x:Type ListBox}">
        <Grid Background="{TemplateBinding Background}">
            <ItemsPresenter Margin="0,-5"/>
        </Grid>
       </ControlTemplate>
   </Window.Resources>


  <ListBox HorizontalAlignment="Center" VerticalAlignment="Center" Template="{DynamicResource ListBoxControlTemplate1}" Background="#FFAB0000">
        <Button Content="Button" Width="88" Margin="0,5"/>
        <Button Content="Button" Width="88" Margin="0,5"/>
        <Button Content="Button" Width="88" Margin="0,5"/>
        <Button Content="Button" Width="88" Margin="0,5"/>
        <Button Content="Button" Width="88" Margin="0,5"/>
    </ListBox>