C# 在动态生成的DataGrid中添加操作列

C# 在动态生成的DataGrid中添加操作列,c#,wpf,C#,Wpf,我正在使用以下代码动态生成DataGrid控件: //c# code DataGrid dg = new DataGrid(); dg.HorizontalAlignment = HorizontalAlignment.Center; dg.VerticalAlignment = VerticalAlignment.Top; dg.AutoGenerateColumns = true; getData gd = new getData(); UserData[] userData = gd.ge

我正在使用以下代码动态生成DataGrid控件:

//c# code
DataGrid dg = new DataGrid();
dg.HorizontalAlignment = HorizontalAlignment.Center;
dg.VerticalAlignment = VerticalAlignment.Top;
dg.AutoGenerateColumns = true;
getData gd = new getData();
UserData[] userData = gd.getUserRecord();
dg.ItemsSource = userData;

panel1.Children.Add(dg);

//XAML code
<StackPanel Name="panel1"  ScrollViewer.VerticalScrollBarVisibility="Visible" Margin="18.971,24,24,0" Grid.Column="1">
/c#代码
DataGrid dg=新DataGrid();
dg.HorizontalAlignment=HorizontalAlignment.Center;
dg.VerticalAlignment=VerticalAlignment.Top;
dg.AutoGenerateColumns=真;
getData gd=新的getData();
UserData[]UserData=gd.getUserRecord();
dg.ItemsSource=用户数据;
小组1.儿童。添加(dg);
//XAML代码
现在,我想在这个数据网格中添加一个名为“Action”的额外列,在每一行上,它都应该有一个delete&edit按钮。我在互联网上搜索,但得到的结果只是动态生成一个动作列,而我需要所有控件动态生成


PS:
UserData
是我的自定义getter/setter类,并且
getData
具有从数据库获取数据的方法

您可以使用
单元格模板创建
DataGridTemplateColumn

DataGrid dg = new DataGrid();
dg.HorizontalAlignment = HorizontalAlignment.Center;
dg.VerticalAlignment = VerticalAlignment.Top;
dg.AutoGenerateColumns = true;
getData gd = new getData();
UserData[] userData = gd.getUserRecord();
dg.ItemsSource = userData;

FrameworkElementFactory sp = new FrameworkElementFactory(typeof(StackPanel));
sp.SetValue(StackPanel.OrientationProperty, Orientation.Horizontal);
FrameworkElementFactory delete = new FrameworkElementFactory(typeof(Button));
delete.AddHandler(Button.ClickEvent, new RoutedEventHandler((s, e) => { MessageBox.Show("deleted click!"); }));
delete.SetValue(ContentControl.ContentProperty, "Delete");
FrameworkElementFactory edit = new FrameworkElementFactory(typeof(System.Windows.Controls.Button));
edit.AddHandler(Button.ClickEvent, new RoutedEventHandler((s, e) => { MessageBox.Show("edited click!"); }));
edit.SetValue(ContentControl.ContentProperty, "Edit");
edit.SetValue(FrameworkElement.MarginProperty, new Thickness(5, 0, 0, 0));
sp.AppendChild(delete);
sp.AppendChild(edit);

DataGridTemplateColumn dataGridTemplateColumn = new DataGridTemplateColumn()
{
    Header = "new...",
    CellTemplate = new DataTemplate { VisualTree = sp }
};

dg.Columns.Add(dataGridTemplateColumn);