Подтвердить что ты не робот

Пробелы между элементами в моем ListBox

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

4b9b3361

Ответ 1

Это связано с заполнением внутри элемента ItemContainerStyle по умолчанию для ListBoxItem. Чтобы удалить это, вы можете переопределить ItemContainerStyle. Например, просто попробуйте приведенный ниже Empty 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>

Ответ 2

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

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

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

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