こんな風にデータをCanvas上に表示したい。
public ObservableCollection<TextData> TextList { get; set; }
TextList = new ObservableCollection<TextData>(
new List<TextData>
{
new TextData{ Left=110, Top=110, Text="嘘だと" },
new TextData{ Left=210, Top=210, Text="言ってよ" },
new TextData{ Left=310, Top=310, Text="バーニィ" },
});
各TextDataクラスはLeft, TopでCanvas上の位置を保持している。では、上記のリストをCanvas上に配置するためのXamlを見てみよう。
<ItemsControl ItemsSource="{Binding Path=TextList}"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Text}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Canvas.Top" Value="{Binding Path=Top}" />
<Setter Property="Canvas.Left" Value="{Binding Path=Left}" />
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
ポイントはItemsControl.ItemsPanelのItemsPanelTemplateを使用している箇所。そこでアイテム配置用のパネルにCanvasを指定しているので、下のほうのItemsControl.ItemContainerStyleで各アイテムのLeft, Topを指定して任意の位置にデータを表示させることが可能となる。サンプルコードはこちら。
(Chromeだと下記iframeが表示されない模様。FireFoxでは表示確認済み)

0 件のコメント:
コメントを投稿