2010-06-15 59 views
6

您好我有一个datagrid有一个datagridtemplate列的数量都是相同的,他们都在模板的stackpanel上有不同的datacontext。WPF DataGridTemplateColumn共享模板?

<toolkit:DataGridTemplateColumn Header="Col 1"> 
       <toolkit:DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <StackPanel DataContext="{Binding Times[0]}"> 
         <!-- the structure that I want to extract to a template --> 
         </StackPanel> 
        </DataTemplate> 
       </toolkit:DataGridTemplateColumn.CellTemplate> 
</toolkit:DataGridTemplateColumn> 

<toolkit:DataGridTemplateColumn Header="Col 2"> 
       <toolkit:DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <StackPanel DataContext="{Binding Times[1]}"> 
         <!-- the same structure here --> 
         </StackPanel> 
        </DataTemplate> 
       </toolkit:DataGridTemplateColumn.CellTemplate> 
</toolkit:DataGridTemplateColumn> 

我想有每列使用特定的ItemTemplate(就像我有一个列表框完成),但似乎无法看到,除非我失去了一些东西。

回答

10

你可以使用一个ContentPresenter实例为每列一个DataTemplate:

<toolkit:DataGrid.Resources> 
    <DataTemplate x:Key="ColumnTemplate"> 
     <StackPanel> 
      <!-- the structure that I want to extract to a template --> 
     </StackPanel> 
    </DataTemplate> 
</toolkit:DataGrid.Resources> 
<toolkit:DataGrid.Columns> 
    <toolkit:DataGridTemplateColumn Header="Col 1"> 
     <toolkit:DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <ContentPresenter ContentTemplate="{StaticResource ColumnTemplate}" Content="{Binding Times[0]}"/> 
      </DataTemplate> 
     </toolkit:DataGridTemplateColumn.CellTemplate> 
    </toolkit:DataGridTemplateColumn> 
    <toolkit:DataGridTemplateColumn Header="Col 2"> 
     <toolkit:DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <ContentPresenter ContentTemplate="{StaticResource ColumnTemplate}" Content="{Binding Times[1]}"/> 
      </DataTemplate> 
     </toolkit:DataGridTemplateColumn.CellTemplate> 
    </toolkit:DataGridTemplateColumn> 
</toolkit:DataGrid.Columns> 

如果时代的元素都是同一类型的,你也可以做<DataTemplate DataType={x:Type YourType}>,然后你就不需要指定ContentTemplate="{StaticResource ColumnTemplate}"在每一列上。

+0

感谢那就是我一直在寻找。我创建了模板,但不知道ContentPresenter在列中显示它。 最后一件事,你知道我可以如何替换这些模板列的背景颜色吗? 再次感谢。 – obaylis 2010-06-15 13:27:43

+0

@obaylis:我认为你可以在DataGrid上设置AlternatingRowBackground属性。如果你需要更复杂的东西,你可以设置AlternationCount,然后使用AlternationIndex。以下是一篇博客文章,介绍如何设置DataGrid的样式:http://blogs.msdn.com/b/jaimer/archive/2009/01/20/styling-microsoft-s-wpf-datagrid.aspx – Quartermeister 2010-06-15 14:44:21