a 中的项目UniformGrid
不能跨越多个单元格。
为什么不使用常规Grid
而不是设置行/列的高度/宽度,*
以便它们的大小都相同?如果您希望单元格是高度与宽度匹配的完美正方形,请务必将 Grid 绑定Height
到Width
,反之亦然。
应该注意的是,您需要在 中应用 Grid 定位属性ItemContainerStyle
,而不是在项目本身上,因为在将该项目添加到之前,ItemsControl
将每个元素包装在 a中(有关更多详细信息,请参阅我的博客文章)ContentPresenter
ItemsPanel
<ItemsControl ItemsSource="{Binding MyCollection}">
<!-- ItemsPanelTemplate -->
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<!-- ItemContainerStyle -->
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Grid.Column"
Value="{Binding ColumnIndex}" />
<Setter Property="Grid.Row"
Value="{Binding RowIndex}" />
<!-- Can either use a DataTrigger to determine these values,
or store them on the object itself -->
<Setter Property="Grid.RowSpan"
Value="{Binding RowSpan}" />
<Setter Property="Grid.ColumnSpan"
Value="{Binding ColumnSpan}" />
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>