2013-12-20 52 views
0

我有一个ItemsControl它有很多列和一个静态标题行。我知道HeaderedItemsControl但我不确定它能达到我想要的。控件模板和项目模板之间的itemscontrol共享网格

我现在拥有的是ControlTemplate作为标题和ItemsPresenter的容器,然后ItemTemplate用于组织记录。

目前我在内容和项目模板中都有一个重复的网格,我想找到一个优雅的解决方案,我可以在两个模板之间共享同一个网格,所以我不必更改两件事情当编辑它时。模拟它下面的样子,实际的控制有更多的列。我读过有关IsSharedSizeScopeSharedSizeGroup,但我推测这是行不通的,因为它只有函数时,有两个网格共享一个父元素(他们都需要为控件模板内)

<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

我有一种感觉,你设置ItemsSource的值完全错误。

它应该是这样的:

<ItemsControl ItemsSource="{Binding SomeSource}"> 

当我拿你的榜样,并运行它正常工作对我来说。

如果您希望共享列大小,那么您可以使用SharedSizeGroup。您必须将范围设置为ItemsControl。

您得到了SharedSizeGroup的错误定义。无论网格放置在何处,只要它们共享父母中的一个,它就可以工作。这是你的情况,因为ItemsControl是最顶级的控件,所以它是每个控件的父级。

+0

我会给它一个镜头,是的,我编辑的例子,当我在响应,绑定是它实际上就像我会改变这一点。我可以删除其中一个网格的标签吗? – pgwri