C# 当其父控件更改设计器中的可视属性时,如何通知子控件?

C# 当其父控件更改设计器中的可视属性时,如何通知子控件?,c#,.net,winforms,user-controls,C#,.net,Winforms,User Controls,我有一个UserControl,它承载一个DataGridView组件,该组件有一个标题和一个数据行 当DataGridView的容器在设计器中更改某些可视属性时,我在尝试通知DataGridView时遇到问题 我重写基本UserControl的BackColor属性以设置网格中数据行的BackColor。目标是,当我设置UserControl容器的背景色时,它将逐渐进入网格 如果显式设置UserControl的BackColor属性,则设计和运行时DataGridControl将正确执行 如果

我有一个
UserControl
,它承载一个
DataGridView
组件,该组件有一个标题和一个数据行

当DataGridView的容器在设计器中更改某些可视属性时,我在尝试通知DataGridView时遇到问题

我重写基本UserControl的BackColor属性以设置网格中数据行的BackColor。目标是,当我设置UserControl容器的背景色时,它将逐渐进入网格

如果显式设置UserControl的BackColor属性,则设计和运行时DataGridControl将正确执行

如果我只是更改容器中的背景色,那么我拥有的在运行时工作,但在设计时是间歇的

将控件放在容器上时,数据行背景色将跟随容器颜色

更改容器的背景色不会调用UserControl的属性setter来更改设计器中的数据行

更改容器确实会更改我在
表格布局面板
上使用
标签
创建的其他自定义组件。我没有将所有标签都设置为与容器匹配,因此必须使用属性设置器才能正确设置。如果我放一个
MessageBox.Show(“Setter Called”)
在属性设置器中,它并不总是发生。在工作控件或我的目标非工作控件中

当我运行项目时,可执行文件会更改行以匹配。作为奖励,设计器的颜色会在显示可执行文件后立即更改,即使在我结束程序后,它仍然保持匹配的颜色

我还在UserControl上尝试了ParentChanged事件,但它仅在程序运行或我从表单中添加或删除控件时才会被调用。就像其他属性一样。永远不要更改IDE中的容器

使用Load事件使代码在运行时工作

当前代码:

public JobPanel()
    {
      InitializeComponent();
      this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
      dataGridView1.RowCount = 1;
      dataGridView1.BorderStyle = System.Windows.Forms.BorderStyle.None;
   }

[BrowsableAttribute(true)]
public override Color BackColor { get { return base.BackColor; } set { SetBackColor(value); } }

private void SetBackColor(Color value)
{
  if (BackColor != value) { //Makes no difference if we remove this test
    base.BackColor = value;
    if (dataGridView1 != null) {
      dataGridView1.Rows[0].DefaultCellStyle.BackColor = BackColor;
      dataGridView1.Rows[0].DefaultCellStyle.SelectionBackColor = BackColor;
    }
  }
}

private void JobPanel_Load(object sender, EventArgs e)
{
  dataGridView1.DefaultCellStyle.BackColor = base.BackColor;
  dataGridView1.DefaultCellStyle.ForeColor = base.ForeColor;
}