c# - 如何以编程方式创建 WPF 工具包 DataGridTemplateColumn?

标签 c# wpf xaml datagrid wpftoolkit

我能够重新创建此 XAML DataGridTextColumn:

<tk:DataGridTextColumn
    Binding="{Binding FirstName}"
    Header="First Name"/>

代码中是这样的:

DataGridTextColumn dgtc = new DataGridTextColumn();
dgtc.Header = propertyLabel;
dgtc.Binding = new Binding(propertyName);
theDataGrid.Columns.Add(dgtc);

但是如何在代码中重新创建以下 DataGridTemplateColumn?

<tk:DataGridTemplateColumn Width="100">
    <tk:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Style="{DynamicResource ManageLinkStyle}"
                    Tag="{Binding Id}" Text="Delete" MouseDown="System_Delete_Click"/>
                <TextBlock Text=" "/>
                <TextBlock Style="{DynamicResource ManageLinkStyle}"
                           Tag="{Binding Id}" Text="Edit" MouseDown="System_Edit_Click"/>
            </StackPanel>
        </DataTemplate>
    </tk:DataGridTemplateColumn.CellTemplate>
</tk:DataGridTemplateColumn>

即我在定义 CellTemplate 时卡住了:

DataGridTemplateColumn dgTemplateColumn = new DataGridTemplateColumn();
dgTemplateColumn.CellTemplate = new CellTemplate ...???

回答:

谢谢 Aran,仅引用 XAML 中的模板键就可以很好地满足我的需要,以下是我如何更改以上内容以使其适合我:

XAML:

<Window.Resources>
    <DataTemplate x:Key="manageAreaCellTemplate">
        <StackPanel Orientation="Horizontal">
            <TextBlock Style="{DynamicResource ManageLinkStyle}"
        Tag="{Binding Id}" Text="Delete" MouseDown="System_Delete_Click"/>
            <TextBlock Text=" "/>
            <TextBlock Style="{DynamicResource ManageLinkStyle}"
               Tag="{Binding Id}" Text="Edit" MouseDown="System_Edit_Click"/>
        </StackPanel>
    </DataTemplate>
</Window.Resources>

代码隐藏:

DataGridTemplateColumn dgTemplateColumn = new DataGridTemplateColumn();
dgTemplateColumn.Width = new DataGridLength(1, DataGridLengthUnitType.Star);
dgTemplateColumn.Header = "Manage Options";
dgTemplateColumn.CellTemplate = this.FindResource("manageAreaCellTemplate") as DataTemplate;
theDataGrid.Columns.Add(dgTemplateColumn);

最佳答案

您仍然可以接受在 xaml 中定义单元格模板吗?

然后你可以定义它

<DataTemplate x:Key="myCellTemplateKey">
    <StackPanel Orientation="Horizontal">
        <TextBlock Style="{DynamicResource ManageLinkStyle}"
            Tag="{Binding Id}" Text="Delete" MouseDown="System_Delete_Click"/>
        <TextBlock Text=" "/>
        <TextBlock Style="{DynamicResource ManageLinkStyle}"
                   Tag="{Binding Id}" Text="Edit" MouseDown="System_Edit_Click"/>
    </StackPanel>
</DataTemplate>

然后在创建 xaml 时从后面的代码中引用它。

dgTemplateColumn.CellTemplate = this.FindResource("myCellTemplateKey") as DataTemplate;

使用 FrameworkElementFactory 创建数据模板充其量只是一种繁琐的操作,而且您永远不知道它们何时会更改框架中的某些内容,因此您的行为未按预期定义(不记得我在哪里读到的,抱歉)。我唯一一次使用它是在我创建一个只有内容控件的数据模板时。然后我使用标准数据模板在该内容控件中显示对象。但使用它通常是一种 hack。

关于c# - 如何以编程方式创建 WPF 工具包 DataGridTemplateColumn?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1757339/

相关文章:

c# - asp.net core 中的授权类型

c# - 带有扩展 WPF 工具包的 MessageBox 的默认 Windows 主题

c# - 学习WP7编程有哪些好书?

c# - 如何从 WPF Itemscontrols 的标签中获取值

c# - 将 XAML PathGeometry 转换为 WPF PathGeometry

xaml - Silverlight 中控件的占位符

c# - Silverlight Web 应用程序 - 现场存储数据

C# 到 Excel - 自定义格式?

c# - 如何附加到表达式

WPF 用百分比将 TextBlock 绑定(bind)到 ProgressBar