是否有一个与ItemsControl.ItemTemplate
等效的机制可以与Grid
一起使用?我有一组项目,我想将它们作为Grid
中的行呈现,以便我可以将Grid.Column
分配给模板内的单个元素(而不是列表控件中的行)。在WPF中使用标准控件是否可能实现这一点?
好的,使用一个附加了Grid.IsSharedSizeScope="true"
属性的ItemsControl。接下来,在你的ItemTemplate中,使用一个<Grid>
,就像平常一样,只不过现在当你添加ColumnDefinition
时,你需要将SharedSizeGroup
属性设置为每个列都唯一的名称。例如:
<ItemsControl Grid.IsSharedSizeScope="true">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="MyFirstColumn" />
<ColumnDefinition SharedSizeGroup="MySecondColumn" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding MyFirstProperty}"/ >
<TextBlock Grid.Column="1" Text="{Binding MySecondProperty}"/ >
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
关于IsSharedSizeScope和SharedSizeGroup的更多信息,请参考SDK中的这个部分。需要注意的是,RowDefinitions也有SharedSizeGroup,因此您也可以进行水平布局。
<ItemsControl.ItemTemplate>
),我还想让第二列填充剩余的空间。如果我没有为第二列设置SharedSizeGroup
,它会起作用:<ColumnDefinition Width =“Auto” SharedSizeGroup =“MyFirstColumn”/>
<ColumnDefinition Width =“*”/>
<ColumnDefinition Width =“Auto” SharedSizeGroup =“MyThirdColumn”/>
。 - ASh