2009/08/19(Wed) 14:29:21 編集(投稿者)
Gridの構成が良く分かりませんが、以下のように均等配置を推測した上で。
---------------
| | |
---------------
| | |
---------------
| | |
---------------
■PathとTextを持ったクラスを作成
public class Data
{
public string Path { get; set; }
public string Text { get; set; }
}
■Dataクラスのコレクションを作成
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
List<Data> source = new List<Data>()
{
new Data() { Path="", Text="Text1"},
new Data() { Path="", Text="Text2"},
new Data() { Path="", Text="Text3"},
new Data() { Path="", Text="Text4"},
new Data() { Path="", Text="Text5"},
new Data() { Path="", Text="Text6"},
new Data() { Path="", Text="Text7"},
new Data() { Path="", Text="Text8"},
new Data() { Path="", Text="Text9"}
};
this.DataContext = source;
}
}
■ItemsControlとUniformGridを使用して定型的なUIを作成
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<ItemsControl ItemsSource="{Binding}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="3" Columns="3" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical" Margin="5">
<Image Source="{Binding Path=Path}" Height="70" Width="70" />
<TextBlock TextWrapping="Wrap" HorizontalAlignment="Center" MaxWidth="90" FontSize="10" Text="{Binding Path=Text}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</Window>
マスが9マス固定という前提です。9マス以上のデータがある場合は切り捨てられます。
もちろんUniformGridのRows・Columnsの指定で色々な表示が出来ます。
スマートか分かりませんが、こんな感じはどうでしょうか?