Вот прототип, который вы можете использовать для экспериментов с различными опциями:
<Grid>
<Grid.Resources>
<local:Range x:Key="sampleData" Minimum="1" Maximum="900"/>
</Grid.Resources>
<ItemsControl ItemsSource="{StaticResource sampleData}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="30" Columns="30"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" FontSize="8">
<TextBlock.LayoutTransform>
<RotateTransform Angle="30"/>
</TextBlock.LayoutTransform>
</TextBlock>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
и генератор данных:
class Range : List<int>, ISupportInitialize
{
public int Minimum { get; set; }
public int Maximum { get; set; }
public void BeginInit() { }
public void EndInit()
{
for (int i = Minimum; i <= Maximum; i++) Add(i);
}
}
, а верхний левый угол выглядит следующим образом:
Вы можете запустить макет, изменив размер окна, и на моем компьютере это немного вяло, но удобно.Затем вы можете проверить другие контейнеры, другие преобразования, преобразование макета или преобразования и т. Д., Чтобы увидеть, какие различия они имеют.