【问题标题】:Add space between items in a WPF/Silverlight ListBox without space above first or below last在 WPF/Silverlight ListBox 中的项目之间添加空格,在第一个上方或最后一个下方没有空格
【发布时间】:2010-03-22 16:43:46
【问题描述】:

是否有标准/最佳方式在 WPF ListBox 中分隔项目,以便连续项目之间有空间,但不高于第一个或低于最后一个?

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

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

谢谢。

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

【问题讨论】:

    标签: .net wpf silverlight xaml listbox


    【解决方案1】:

    我要做的是,在 ListBox 控件模板上赋予负边距,并为 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>
    

    【讨论】:

    • 我喜欢这个解决方案的简单性,但是使用负边距会影响相邻控件的布局(在我的例子中,切断文本内容)。相反,我在ListBox 上使用了负顶部和底部Padding,效果很好。
    • 负填充的想法有点违反直觉,但它提供了一个非常简单明了的解决方案。
    • 是的,你需要让它正确,我只是展示了一个不那么努力的想法。无论您希望为子元素提供什么顶部和底部边距,请在 ListBox.ControlTemplate 视觉对象上提供相同但负的边距。
    【解决方案2】:

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

    【讨论】:

    • +1 谢谢;这是一个很好的解决方案;当唯一的样式差异是周围的空白时,这比我想要的要多。
    猜你喜欢
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-07
    相关资源
    最近更新 更多