Вы можете попробовать использовать WrapPanel
в сочетании с ItemsControl
, чтобы сделать это:
<ItemsControl x:Name="RectanglesItemsControl">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel IsItemsHost="True"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate DataType="myNamespace:MyType">
<Rectangle Width="{Binding Width}" Height="{Binding Height}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
MyType будет простым классом со свойствами Width
и Height
, это будеттакже необходимо реализовать INotifyPropertyChanged
.
Затем вы можете установить ItemsSource
*1012* для своего списка или, что еще лучше, ObservableCollection<MyType>
, чтобы зарегистрировать изменения коллекции:
RectangleItemsControl.ItemsSource = myLongCollectionFilledWithALotOfRectangles;
РЕДАКТИРОВАТЬ: Вы можете заменить WrapPanel
на что угодно, вы также можете использовать <UniformGrid Rows="100" Columns="100" IsItemsHost="True"/>
, чтобы иметь 100 строк и столбцов.