我可以将DataGrid的CellTemplate定义为资源,以便可以在多个列中重用它吗?

tee*_*nup 5 wpf datagrid celltemplate silverlight-4.0

我想在DataGrid中为我的所有列创建一个特定的模板.通常的方法是我将在每个Column的DataGrid中多次复制整个XAML for DataTemplate.

有没有什么办法可以将CellTemplate全局定义为资源,然后只需将"Binding"的"Path"属性传递给它,以便它从DataContext中显示正确的项目?

这可能吗 ?

cod*_*ter 6

使用键/名称在App.Xaml文件中创建DataTemplate.

 <DataTemplate x:Name="myTemplate" TargetType="sdk:DataGridTemplateColumn">
                <StackPanel Orientation="Horizontal">
                    <TextBox Text="{Binding FirstName}" BorderThickness="0"/>
                    <TextBox Text="{Binding LastName}" BorderThickness="0"/>
                </StackPanel>
  </DataTemplate>
Run Code Online (Sandbox Code Playgroud)

现在你可以在DataGrid中使用这个模板了

 <sdk:DataGridTemplateColumn Header="Name" CellTemplate={StaticResource myTemplate}>
Run Code Online (Sandbox Code Playgroud)

或者
您可以在代码后面传递绑定路径名称,如...

        string colPath = "FirstName";
        DataGrid grid = new DataGrid();
        grid.ItemsSource = myViewModel.EmpCollection;

        DataGridTemplateColumn column = new DataGridTemplateColumn();
        DataTemplate itemTemplate = (DataTemplate)XamlReader.Load("<DataTemplate xmlns=\"http://schemas.microsoft.com/client/2007\"> <ContentPresenter Content=\"{Binding Path=" + colPath + "}\"  /></DataTemplate>");

        column.CellTemplate = itemTemplate;
        grid.Columns[0] = column;
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助.