2014-01-07 3 views
7

Я показываю коллекцию List<string> в ItemsControl. Проблема заключается в том, что между элементами списка «TheyAreAllNextToEachOther» нет промежутков.Интервал позиций в WPF ItemsControl

Как создать промежуток между элементами?

<ItemsControl Grid.Column="2" 
     Grid.ColumnSpan="2" 
     ItemsSource="{Binding Path=ShowTimes}" 
     BorderThickness="0"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapPanel IsItemsHost="True" Orientation="Horizontal"/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
</ItemsControl> 
+4

Просто, чтобы вы знали разницу между двумя ответами, которые вы в настоящее время предоставили, 'ItemContainerStyle' является' Style' для контейнера item или 'ListBoxItem', если вы используете' ListBox'. «ItemTemplate» - это «DataTemplate», который определяет, как должно выглядеть «содержимое» элементов. Поэтому в «ItemContainerStyle» вы можете получить доступ к свойствам контейнера (например, ListBoxItem.IsSelected) и в «DataTemplate», вы можете получить доступ к свойствам публичного класса элемента данных. – Sheridan

ответ

3

Я бы добавить ItemTemplate, где вы установите Маржа

<ItemsControl.ItemTemplate> 
    <DataTemplate> 
     <TextBlock Margin="3,3,3,3" Text="{Binding}"/> 
    </DataTemplate> 
</ItemsControl.ItemTemplate> 
+4

Хотя это действительно работает и похоже на почти любое другое решение, оно не идеально. Если есть только один элемент, вы добавляете пробел ни для чего, и у первого и последнего элементов всегда будет дополнительное пространство. Это также означает, что каждый элемент имеет эффективный интервал 6, поскольку предыдущий элемент всегда будет иметь запас 3 уже существующих. – Julien

+0

Если вы хотите интервал 3, вы можете установить левое и правое поле в 1,5 ... просто говоря – sam

+1

Если вам просто нужны промежутки без внешнего интервала элемента управления элементами, установите отрицательные поля на панель элементов, равную положительному краю элементы: '' в случае ответа с разрывом в элементе 6. – grek40

40

ОБЕСПЕЧИТЬ стиль ваших ItemsControl контейнеров (по умолчанию ContentPresenter) как это, где вы можете набор Margin сказать 5:

<ItemsControl> 
     <ItemsControl.ItemContainerStyle> 
      <Style> 
       <Setter Property="FrameworkElement.Margin" Value="5"/> 
      </Style> 
     </ItemsControl.ItemContainerStyle> 
    </ItemsControl> 
Смежные вопросы