Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从DataGrid列标题中使用的DataTemplate中以编程方式更改标签内容_C#_.net_Wpf_Datagrid_Datatemplate - Fatal编程技术网

C# 从DataGrid列标题中使用的DataTemplate中以编程方式更改标签内容

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列标题

我正在动态创建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");