It will work with a listbox, but you have to edit its ItemsPanelTemplate and use something like the WrapPanel control (horizontal orientation) from the toolkit. Then, you can define the ItemTemplate as a square image. That way every new item will stack at the right from the other until there's no more room and it will continue on the next row. So for a set number of columns, you have to specify the width in the item template (173 in my example so in the portrait mode, i end with 2 columns).
Here's a example from one of my projects (you should adjust bindings and names to your scenario):
<ListBox x:Name="lbxCategorias" ItemsSource="{Binding ChannelButtons}"
SelectionChanged="lbxCategorias_SelectionChanged">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<toolkit:WrapPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Image Source="{Binding BigButtonIconPath}" Width="173" Height="173" Margin="0 0 12 10" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>