diff --git a/src/System.Windows.Forms/System/Windows/Forms/Controls/DataGridView/DataGridView.cs b/src/System.Windows.Forms/System/Windows/Forms/Controls/DataGridView/DataGridView.cs index 5f1af6e83c4..6c4941d5f52 100644 --- a/src/System.Windows.Forms/System/Windows/Forms/Controls/DataGridView/DataGridView.cs +++ b/src/System.Windows.Forms/System/Windows/Forms/Controls/DataGridView/DataGridView.cs @@ -2042,6 +2042,9 @@ public DataGridViewCellStyle DefaultCellStyle // Update ambient font flag depending on cell style font _dataGridViewState1[State1_AmbientFont] = value?.Font == base.Font; + // If ForeColor is explicitly set, stop treating it as ambient so Form.ForeColor doesn't override it. + _dataGridViewState1[State1_AmbientForeColor] = value is null || value.ForeColor.IsEmpty; + DataGridViewCellStyleDifferences dgvcsc = cs.GetDifferencesFrom(DefaultCellStyle); if (dgvcsc != DataGridViewCellStyleDifferences.None) { diff --git a/src/test/unit/System.Windows.Forms/System/Windows/Forms/DataGridViewTests.cs b/src/test/unit/System.Windows.Forms/System/Windows/Forms/DataGridViewTests.cs index 51e5f9b4b98..1440d776393 100644 --- a/src/test/unit/System.Windows.Forms/System/Windows/Forms/DataGridViewTests.cs +++ b/src/test/unit/System.Windows.Forms/System/Windows/Forms/DataGridViewTests.cs @@ -4084,4 +4084,85 @@ public void DataGridView_Dispose_KeyboardToolTip_Disposed() dataGridView.Dispose(); toolTipDisposeCount.Should().Be(1); } + + [WinFormsFact] + public void DataGridView_DefaultCellStyle_SetWithForeColor_DoesNotInheritParentForeColor() + { + using Form form = new(); + using DataGridView control = new(); + + control.DefaultCellStyle = new DataGridViewCellStyle + { + Alignment = DataGridViewContentAlignment.MiddleLeft, + BackColor = SystemColors.Window, + Font = Control.DefaultFont, + ForeColor = Color.Lime, + SelectionBackColor = SystemColors.Highlight, + SelectionForeColor = SystemColors.HighlightText, + WrapMode = DataGridViewTriState.False + }; + + control.Columns.Add(new DataGridViewTextBoxColumn()); + int rowIndex = control.Rows.Add(); + + form.Controls.Add(control); + + form.ForeColor = Color.Red; + + Assert.Equal(Color.Lime, control.DefaultCellStyle.ForeColor); + } + + public void DataGridView_DefaultCellStyle_WithoutForeColor_InheritsParentForeColor() + { + using Form form = new(); + using DataGridView control = new(); + + control.DefaultCellStyle = new DataGridViewCellStyle + { + Alignment = DataGridViewContentAlignment.MiddleLeft, + BackColor = SystemColors.Window, + Font = Control.DefaultFont, + SelectionBackColor = SystemColors.Highlight, + SelectionForeColor = SystemColors.HighlightText, + WrapMode = DataGridViewTriState.False + }; + + control.Columns.Add(new DataGridViewTextBoxColumn()); + int rowIndex = control.Rows.Add(); + + form.Controls.Add(control); + + form.ForeColor = Color.Red; + + Assert.Equal(Color.Red, control.DefaultCellStyle.ForeColor); + Assert.Equal(Color.Red, control.Rows[rowIndex].Cells[0].InheritedStyle.ForeColor); + } + + [WinFormsFact] + public void DataGridView_DefaultCellStyle_EmptyForeColor_InheritsParentForeColor() + { + using Form form = new(); + using DataGridView control = new(); + + control.DefaultCellStyle = new DataGridViewCellStyle + { + Alignment = DataGridViewContentAlignment.MiddleLeft, + BackColor = SystemColors.Window, + Font = Control.DefaultFont, + ForeColor = Color.Empty, + SelectionBackColor = SystemColors.Highlight, + SelectionForeColor = SystemColors.HighlightText, + WrapMode = DataGridViewTriState.False + }; + + control.Columns.Add(new DataGridViewTextBoxColumn()); + int rowIndex = control.Rows.Add(); + + form.Controls.Add(control); + + form.ForeColor = Color.Red; + + Assert.Equal(Color.Red, control.DefaultCellStyle.ForeColor); + Assert.Equal(Color.Red, control.Rows[rowIndex].Cells[0].InheritedStyle.ForeColor); + } }