2010-06-15 111 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