ItemsControl
предназначен для создания динамических коллекций элементов управления пользовательского интерфейса из других коллекций, даже коллекций данных, не относящихся к пользовательскому интерфейсу.
Вы можете создать шаблон ItemsControl
для рисования на Canvas
. Идеальным способом было бы установить заднюю панель на Canvas
, а затем установить свойства Canvas.Left
и Canvas.Top
для ближайших потомков. Я не мог заставить это работать, потому что ItemsControl
оборачивает его дочерние элементы контейнерами, и трудно установить свойства Canvas
для этих контейнеров.
Вместо этого я использую Grid
в качестве корзины для всех предметов и рисую их по отдельности Canvas
. При таком подходе есть некоторые накладные расходы.
<ItemsControl x:Name="Collection" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type local:MyPoint}">
<Canvas HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Ellipse Width="10" Height="10" Fill="Black" Canvas.Left="{Binding X}" Canvas.Top="{Binding Y}"/>
</Canvas>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Вот код, который я использовал для настройки исходной коллекции:
List<MyPoint> points = new List<MyPoint>();
points.Add(new MyPoint(2, 100));
points.Add(new MyPoint(50, 20));
points.Add(new MyPoint(200, 200));
points.Add(new MyPoint(300, 370));
Collection.ItemsSource = points;
MyPoint
- это пользовательский класс, который ведет себя так же, как System
версия. Я создал его, чтобы продемонстрировать, что вы можете использовать свои собственные классы.
Одна последняя деталь: вы можете привязать свойство ItemsSource к любой коллекции, которую вы хотите. Например:
<ItemsControls ItemsSource="{Binding Document.Items}"><!--etc, etc...-->
Для получения дополнительной информации о ItemsControl и о том, как он работает, ознакомьтесь со следующими документами: Справочник по библиотеке MSDN ; Шаблонирование данных ; Серия доктора WPF на ItemsControl .