错误:元素不能是自己的父元素

时间:2015-12-03 10:13:49

标签: c# wpf

为什么它不起作用?

dataGrid.Columns.Add(new DataGridTextColumn() 
{ 
   Header = new DataGridColumnHeader 
   { 
      Name = eName, 
      Background = Brushes.AliceBlue 
   } 
});

错误是:

  

PresentationFramework.dll中出现'System.InvalidOperationException'类型的第一次机会异常

     

附加信息:元素不能是其自己的父母。

2 个答案:

答案 0 :(得分:1)

不幸的是Header不是一个控件。这是一个内容。 您可以使用 HeaderStyle

达到目标
Style headerStyle = new Style(typeof(DataGridColumnHeader));
headerStyle.Setters.Add(
     new Setter(DataGridColumnHeader.BackgroundProperty, Brushes.AliceBlue));

lb.Columns.Add(new DataGridTextColumn()
{
     Header = eName,
     HeaderStyle = headerStyle
 });

答案 1 :(得分:0)

虽然Header应该是对象类型,但是不允许添加另一个DataGridColumn类型。这就是发生异常的原因。您基本上是嵌套您的列是非法的。它最好是另一种控制作为其内容。

例如,这将基于您的代码:

dataGrid.Columns.Add(new DataGridTextColumn()
{
    Header = new Button()
    {
         Content = "string",
         Background = Brushes.AliceBlue
     }
});

如果没有backround或任何其他UI细节,您实际上可以这样做:

dataGrid.Columns.Add(new DataGridTextColumn()
{
   Header = "header string"
});