我有一个ItemsControl
,它有很多列和一个静态标题行。
我知道HeaderedItemsControl
但我不确定它能达到我想要的效果。
我目前所拥有的是ControlTemplate
作为标头和ItemsPresenter
的容器,然后ItemTemplate
用于整理记录。
目前我在内容和项目模板中都有一个重复的网格,我想找到一个优雅的解决方案,我可以在两个模板之间共享相同的网格,所以我不必更改两件事编辑它。模拟下面的内容,实际控件有更多列。我已经阅读了IsSharedSizeScope
和SharedSizeGroup
,但我认为这不起作用,因为它仅在有两个网格共享父元素时才起作用(它们都需要在ControlTemplate中)
<ItemsControl ItemsSource="{Binding SomeSource}">
<ItemsControl.Template>
<ControlTemplate TargetType="ItemsControl">
<StackPanel>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="Col1" />
<TextBlock Grid.Column="1" Text="Col2" />
<TextBlock Grid.Column="2" Text="Col3" />
</Grid>
<ItemsPresenter/>
</StackPanel>
</ControlTemplate>
</ItemsControl.Template>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="ItemCol1" />
<TextBlock Grid.Column="1" Text="ItemCol2" />
<TextBlock Grid.Column="2" Text="ItemCol3" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
我可能做过一些不好的做法,所以请随时给我指点。
答案 0 :(得分:0)
我觉得你将ItemsSource的值设置为完全错误。
它应该是这样的:
<ItemsControl ItemsSource="{Binding SomeSource}">
当我举出你的例子并运行它时,一切正常。
如果您希望共享列大小,则可以使用SharedSizeGroup。您必须将范围设置为ItemsControl。
您的SharedSizeGroup定义错误。无论网格放在哪里,只要他们与父母共享同一个网格,它就能工作。这是你的情况,因为ItemsControl是最顶层的控件,所以它是内部每个控件的父级。