2011-01-16 3 views
21

Когда я создаю 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 рядом друг с другом. Я попытался изменить ItemTemplateListBox, но это не помогло.

+0

Когда я использую 'ListBox' с традиционной вертикальной ориентации никакие пункты не только рядом друг с другом, как и ожидалось, и как хотел ... :( – drasto

ответ

33

Это связано с заполнением внутри элемента 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> 
+0

Отлично, отлично, отлично! Работает как шарм! Сэкономил мне много времени :) Спасибо – drasto

+0

Прерывает обработку выбора для ListBox. – bugged87

+1

Выполняет задачу по удалению элементов пространства в пространстве, но полностью удаляет функциональность выбора. Вместо того, чтобы касаться ContentPresenter, как в принятом ответе выше, я решил свою проблему, установив Padding и Margin равным 0. Кроме того, я заметил, что установка только одного из них, как показано ниже, не будет работать. Таким образом, вместо изменения свойства Шаблон выше, я просто сделал ; <Свойство Setter = "Margin" Value = "0" />. Это удаленные элементы пространства btw и мой выбор все еще работают. – pixel

19

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

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

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

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

+0

Можете ли вы предоставить быстрый пример кода? Те же пробелы есть, даже если Я использую некоторые другие элементы управления как элементы 'ListBox' ... – drasto

+0

Смешанный, он находится в ListViewItem, отредактировал его, чтобы посмотреть, могу ли я дать вам метод, чтобы избавиться от них. Edit: Ну, другой ответ достаточно полно, поэтому нет необходимости в этом ... –

+0

Это не работает – pixel

Смежные вопросы