Это вызвано тем, как VirtualizingStackPanel обрабатывает прокрутку, хотя я не знаю причину этого.Вы можете предотвратить это, используя обычную StackPanel в качестве ItemsPanel вместо VirtualizingStackPanel:
<ListBox x:Name="Item1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"
Width="300" BorderBrush="Red" BorderThickness="5">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
или запретив VirtualizingStackPanel обрабатывать прокрутку, установив ScrollViewer.CanContentScroll в False:
<ListBox x:Name="Item1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"
Width="300" BorderBrush="Red" BorderThickness="5"
ScrollViewer.CanContentScroll="False">
Обратите внимание, что выполнение любого из них приведет к потере виртуализации во внутреннем ListBox.В этом случае вы все равно не воспользовались этим преимуществом, так как внешний ListBox имеет ScrollViewer, который позволит внутреннему ListBox расти настолько высоко, насколько он хочет, что означает, что он всегда будет отображать все свои строки.