2010-03-22 31 views
11

有没有在WPF ListBox空间的项目,标准/最好的方式,使得在连续项之间的空间,但不高于第一或低于最后?没有空间在WPF/Silverlight的ListBox的项目之间添加空间上面第一或低于去年

对我而言,添加间距最明显的方法是修改ItemTemplate以在每个项目的上方和下方或上方和下方包含空格。这当然意味着在第一个和/或最后一个项目上方/下方还会有空间,或者是单个项目。

我可以使用触发器为第一选择不同的模板,最后,中间品,但不知道是否有更简单的东西,我很想念 - 似乎控制间距将是一个共同的要求。

谢谢。

注:我在WPF的工作,但认为这是如果在Silverlight XAML不相同相似。

回答

11

我会做的是给列表框控件模板上的负边距,并给DataTemplate/ItemContainerStyle提供相同的边距。这使第一个和最后一个项目中的空间。检查下面的XAML。相反,在DataTemplate中设置了Button(ListBoxItem)本身的边界。

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

我喜欢这个解决方案的简单,但使用阴性切缘影响相邻控件的布局不同的样式(在我的情况,切断文本内容)。相反,我在'ListBox'上使用了负面的顶部和底部'Padding',效果很好。 – Jay 2010-03-22 19:16:18

+0

负填充的想法有点违反直觉,但它使得一个非常简单和简单的解决方案。 – 2010-03-22 20:38:33

+0

是的,你需要做出正确的选择,我只是展示了一个不太容易的想法。无论您希望赋予子元素的顶部和底部边距如何,请在ListBox.ControlTemplate视觉效果上给予相同但负面的效果。 – 2010-03-22 20:38:37

2

你可以使用一个StyleSelector,并将其分配给ItemContainerStyleSelector财产。在风格选择,你只要选择基于该项目是否是第一次,最后或其他

+0

+1谢谢;这是一个很好的解决方案;当唯一的样式差异是周围的空白时,它只是比我想要的更多。 – Jay 2010-03-22 19:12:25

相关问题