Assuming your SurfaceListBox is basically a ListBox, it is laying out EACH item vertically, where each item has a StackPanel, and althout its layout is horizontal, it only contains ONE item.
Consider changing the ItemsPanel of your ListBox:
<Custom:SurfaceListBox x:Name="ShopImagesListBox"
ItemTemplate="{DynamicResource ShopsImagesItemDataTemplate}"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ItemContainerStyle="{DynamicResource ShopImagesSurfaceListBoxItemStyle}"
Height="270"
Margin="40,2,40,19"
Grid.Row="2"
Grid.ColumnSpan="3"
>
<Custom:SurfaceListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" IsItemsHost="True" />
</ItemsPanelTemplate>
</Custom:SurfaceListBox.ItemsPanel>