Ответ 1
Что бы я делал, дайте отрицательное поле в шаблоне управления ListBox и дайте тот же самый запас DataTemplate/ItemContainerStyle. которые образуют пространство в первом и последнем элементах. Проверьте ниже XAML. Вместо этого в DataTemplate я дал поле самому Button (ListBoxItem).
<Windows.Resources>
<ControlTemplate x:Key="ListBoxControlTemplate1" TargetType="{x:Type ListBox}">
<Grid Background="{TemplateBinding Background}">
<ItemsPresenter Margin="0,-5"/>
</Grid>
</ControlTemplate>
</Window.Resources>
<ListBox HorizontalAlignment="Center" VerticalAlignment="Center" Template="{DynamicResource ListBoxControlTemplate1}" Background="#FFAB0000">
<Button Content="Button" Width="88" Margin="0,5"/>
<Button Content="Button" Width="88" Margin="0,5"/>
<Button Content="Button" Width="88" Margin="0,5"/>
<Button Content="Button" Width="88" Margin="0,5"/>
<Button Content="Button" Width="88" Margin="0,5"/>
</ListBox>