我的ListBox中的项之间的差距

时间:2011-01-16 05:40:23

标签: .net wpf listview listbox wpf-controls

当我使用水平项目排序创建ListBox时,例如:

<DockPanel>
    <ListBox>
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <VirtualizingStackPanel Orientation="Horizontal" />
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
        <ListBoxItem>
            <Button Content="Hello" />
        </ListBoxItem>
        <ListBoxItem>
            <Button Content="Hello" />
        </ListBoxItem>
    </ListBox>
</DockPanel>

我在列表中的按钮之间有小间隙,如下图中的箭头所示:

Picture showing gaps

我怎样才能摆脱这些空白?我需要让ListBox中的物品彼此相邻。我尝试更改ItemTemplate的{​​{1}},但没有帮助。

2 个答案:

答案 0 :(得分:36)

这是因为ListBoxItem的默认ItemContainerStyle中的填充。要删除它,您可以覆盖ItemContainerStyle。例如,只需在ListBox中尝试以下Empty ItemContainerStyle,就可以看到边距不再存在。

    <ListBox >
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate >
                <VirtualizingStackPanel IsItemsHost="True" Orientation="Horizontal"/>
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
        <ListBox.ItemContainerStyle>
            <Style TargetType="{x:Type ListBoxItem}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ListBoxItem}">
                            <ContentPresenter/>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </ListBox.ItemContainerStyle>
        <Button Content="hello1" Width="75"/>
        <Button Content="Hello2" Width="75"/>
    </ListBox>

答案 1 :(得分:28)

这些差距在ControlTemplate的{​​{1}}内,您必须覆盖我害怕......

编辑:在某些平台上,您甚至不需要弄乱ListViewItems来消除项目之间的差距:

Template

为了摆脱实际需要更改ListBox ControlTemplate本身的那一侧的差距,这不是项目的问题。在默认的Aero模板中,有一个带有 <ListBox.ItemContainerStyle> <Style TargetType="ListBoxItem"> <Setter Property="Padding" Value="0"/> </Style> </ListBox.ItemContainerStyle>

的边框