Java начинает эту операцию CAS, также
видят здесь
существуют практические применения для этого, как хеш-таблица без блокировок используются в многопроцессорной системе
Это происходит из-за заполнения внутри 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>
Эти пробелы находятся внутри ControlTemplate
из ListViewItems
, вам придется преодолеть это, я боюсь ...
Редактировать: На некоторых платформах вам даже не нужно связываться с Template
, чтобы избавиться от пробелов между предметами:
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="Padding" Value="0"/>
</Style>
</ListBox.ItemContainerStyle>
Чтобы избавиться от пробелов на самом деле вам нужно изменить сам шаблон ListBox ControlTemplate, дело не в элементах. В шаблоне Aero по умолчанию есть граница с Padding = 1