Я реализовал пользовательское представление для ListView, используя код, основанный на http://msdn.microsoft.com/en-us/library/ms748859.aspx
В «TileView» как настроить ListView для растягивания каждой плитки в соответствии с доступным пространством. Т.е. в ListView помещается ровно 3 столбца, даже если ListView меняет размер (т. Е. Размер каждой плитки всегда должен быть 1/3 ширины).
<l:PlainView x:Key="tileView" ItemTemplate="{StaticResource centralTile}" />
<DataTemplate x:Key="centralTile">
<StackPanel>
<Grid HorizontalAlignment="Center">
<Image Source="{Binding XPath=@Image}" />
</Grid>
<TextBlock Text="{Binding XPath=@Name}" />
<TextBlock Text="{Binding XPath=@Type}" />
</StackPanel>
</DataTemplate>
Edit:
У меня есть ListView для отображения x плиток с использованием приведенного выше и изменения следующего XAML в этом примере:
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<WrapPanel Width="{Binding (FrameworkElement.ActualWidth),
RelativeSource={RelativeSource
AncestorType=ScrollContentPresenter}}"
ItemWidth="{Binding (ListView.View).ItemWidth,
RelativeSource={RelativeSource AncestorType=ListView}}"
MinWidth="{Binding (ListView.View).ItemWidth,
RelativeSource={RelativeSource AncestorType=ListView}}"
ItemHeight="{Binding (ListView.View).ItemHeight,
RelativeSource={RelativeSource AncestorType=ListView}}"/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<UniformGrid Columns="3"/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
Это именно то, что мне нужно, где, если ListView изменяет размеры, столбцы также изменяют размер.
Теперь мне нужно выяснить, как динамически изменять столбцы UniformGrid:)