C# 从DataGrid列标题中使用的DataTemplate中以编程方式更改标签内容
我正在动态创建DataGrid列(基于ViewModel中的事件),并以编程方式将它们添加到现有DataGrid中。每列都使用一个通用HeaderTemplate,方法是将其设置为在xaml中标识的DataTemplate。DataTemplate包含两个标签,在创建DataGrid列时需要更改其中的内容。如何做到这一点?我知道DataTemplate使用ContentPresenter,但在动态创建的DataGrid列中访问它时遇到问题。代码如下: xaml:(用于格式化DataGrid列标题的模板):C# 从DataGrid列标题中使用的DataTemplate中以编程方式更改标签内容,c#,.net,wpf,datagrid,datatemplate,C#,.net,Wpf,Datagrid,Datatemplate,我正在动态创建DataGrid列(基于ViewModel中的事件),并以编程方式将它们添加到现有DataGrid中。每列都使用一个通用HeaderTemplate,方法是将其设置为在xaml中标识的DataTemplate。DataTemplate包含两个标签,在创建DataGrid列时需要更改其中的内容。如何做到这一点?我知道DataTemplate使用ContentPresenter,但在动态创建的DataGrid列中访问它时遇到问题。代码如下: xaml:(用于格式化DataGrid列标题
然后,我想访问labelA和labelB并更改其内容。您不能在运行时更改模板的内容,除非您希望使用该模板的每个项目也更改其内容 在您的情况下,我会根据需要创建标题。您可以通过将创建头的代码放在它自己的方法中来简化
public void AddColumnHeader(DataGridTextColumn column, string header1, string header2)
{
var panel = new StackPanel();
var labelA = new Label();
labelA.Content = header1;
panel.Children.Add(labelA);
var separator = new Separator();
separator.HorizontalAlignment = HorizontalAlignment.Stretch;
panel.Children.Add(separator);
var labelB = new Label();
labelB.Content = header2;
panel.Children.Add(labelB);
column.Header = panel;
}
然后,要应用标题,只需使用
var column = new DataGridTextColumn();
AddColumnHeader(column);
DataGrid1.Columns.Add(column, "label content 1", "label content 2");
public void AddColumnHeader(DataGridTextColumn column, string header1, string header2)
{
var panel = new StackPanel();
var labelA = new Label();
labelA.Content = header1;
panel.Children.Add(labelA);
var separator = new Separator();
separator.HorizontalAlignment = HorizontalAlignment.Stretch;
panel.Children.Add(separator);
var labelB = new Label();
labelB.Content = header2;
panel.Children.Add(labelB);
column.Header = panel;
}
var column = new DataGridTextColumn();
AddColumnHeader(column);
DataGrid1.Columns.Add(column, "label content 1", "label content 2");