Разрывы между элементами в моем ListBox - PullRequest
24 голосов
/ 16 января 2011

Когда я создаю 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 из ListBox, но это не помогло.

Ответы [ 2 ]

37 голосов
/ 16 января 2011

Это из-за заполнения внутри ItemContainerStyle по умолчанию для ListBoxItem.Чтобы удалить это, вы можете переопределить ItemContainerStyle.Например, просто попробуйте ниже Пустой ItemContainerStyle к вашему ListBox, и вы увидите, что поле больше не существует.

    <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>
28 голосов
/ 16 января 2011

Эти пробелы находятся внутри ControlTemplate из ListViewItems, вам нужно переопределить это, я боюсь ...

Редактировать: На некоторых платформах вы делаетедаже не нужно связываться с Template, чтобы избавиться от пробелов между элементами:

    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="Padding" Value="0"/>
        </Style>
    </ListBox.ItemContainerStyle>

Чтобы избавиться от пробела на той самой стороне, вам на самом деле нужно изменить сам объект ListBox ControlTemplate, это невопрос предметов.В шаблоне Aero по умолчанию есть граница с Padding = 1

...