WPF DataGridTemplateColumn共享模板?

oba*_*lis 6 wpf datagrid datagridtemplatecolumn

嗨,我有一个datagrid,它有许多datagridtemplate列,除了它们在模板的stackpanel上都有不同的datacontext之外,它们都是相同的.

<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>
Run Code Online (Sandbox Code Playgroud)

我想让每一列使用一个特定的itemtemplate(就像我已经完成了一个列表框),但似乎看不出如何,除非我遗漏了一些东西.

Qua*_*ter 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>
Run Code Online (Sandbox Code Playgroud)

如果Times的元素都是相同的类型,您也可以这样做<DataTemplate DataType={x:Type YourType}>,然后您不需要ContentTemplate="{StaticResource ColumnTemplate}"在每列上指定.