在 WPF ItemsControl 中绕过栅栏原则

Posted

技术标签:

【中文标题】在 WPF ItemsControl 中绕过栅栏原则【英文标题】:Getting round the fencepost principle in a WPF ItemsControl 【发布时间】:2012-12-22 15:43:03 【问题描述】:

我有一个 ItemsControl,其中包含 Margin0,0,0,20 的项目 DataTemplate,以便在每个项目之间添加 20 像素的间隙。问题是,当这个控件滚动时,由于这个边距被应用到最终项目,在最终项目之后有一个空闲的 20px。

我如何在最后移除/剪掉这个间隙,或者确保一开始就没有添加它?即,在列表的开头或结尾应用 个项目之间的 20px 间隙,但 不是

【问题讨论】:

【参考方案1】:

ItemsPanelTemplate 上,将Margin 属性设置为“0,0,0,-20”。

例子:

<Grid Background="Black">
    <ItemsControl ItemsSource="abcdefg" Background="White" VerticalAlignment="Top">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Border Margin="0,0,0,20" Background="Silver">
                    <TextBlock Text="Binding" Margin="5" />
                </Border>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Margin="0,0,0,-20" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
    </ItemsControl>
</Grid>

【讨论】:

以上是关于在 WPF ItemsControl 中绕过栅栏原则的主要内容,如果未能解决你的问题,请参考以下文章

WPF里ItemsControl的分组实现

WPF ItemsControl DataTrigger EnterActions动画未启动

WPF ItemsControl ListBox ListView比较

在WPF中的UserControl中的ItemsControl中绑定问题

WPF中Expander与ListBox(ItemsControl)嵌套中的问题

WPF下Itemscontrol分组 样式