diff --git a/src/System.Windows.Forms/System/Windows/Forms/Controls/ComboBox/ComboBox.ModernComboAdapter.cs b/src/System.Windows.Forms/System/Windows/Forms/Controls/ComboBox/ComboBox.ModernComboAdapter.cs index 2623d41f726..7f2a1c94589 100644 --- a/src/System.Windows.Forms/System/Windows/Forms/Controls/ComboBox/ComboBox.ModernComboAdapter.cs +++ b/src/System.Windows.Forms/System/Windows/Forms/Controls/ComboBox/ComboBox.ModernComboAdapter.cs @@ -418,7 +418,7 @@ private static Color GetBorderColor(ComboBox comboBox, bool useAccent) return useAccent ? Application.SystemVisualSettings.AccentColor - : comboBox.ForeColor; + : ModernControlColorMath.TextControlBorderColor; } private static int GetBorderThickness(ComboBox comboBox) diff --git a/src/System.Windows.Forms/System/Windows/Forms/Controls/TextBox/TextBoxBase.cs b/src/System.Windows.Forms/System/Windows/Forms/Controls/TextBox/TextBoxBase.cs index 021b73554da..56a5bff86e2 100644 --- a/src/System.Windows.Forms/System/Windows/Forms/Controls/TextBox/TextBoxBase.cs +++ b/src/System.Windows.Forms/System/Windows/Forms/Controls/TextBox/TextBoxBase.cs @@ -2663,10 +2663,9 @@ private protected virtual void OnNcPaint(Graphics graphics, HDC windowHdc) int borderThickness = Math.Max(focusBorderMetrics.Width, focusBorderMetrics.Height); int focusBandHeight = GetVisualStylesFocusBandHeight(); - Color adornerColor = ForeColor; - Color clientBackColor = BackColor; Color parentBackColor = Parent?.BackColor ?? BackColor; + Color adornerColor = ModernControlColorMath.TextControlBorderColor; using var clientBackgroundBrush = clientBackColor.GetCachedSolidBrushScope(); using var adornerBrush = adornerColor.GetCachedSolidBrushScope(); diff --git a/src/System.Windows.Forms/System/Windows/Forms/Controls/UpDown/UpDownBase.cs b/src/System.Windows.Forms/System/Windows/Forms/Controls/UpDown/UpDownBase.cs index c7ed217446c..9d76b4c3771 100644 --- a/src/System.Windows.Forms/System/Windows/Forms/Controls/UpDown/UpDownBase.cs +++ b/src/System.Windows.Forms/System/Windows/Forms/Controls/UpDown/UpDownBase.cs @@ -1084,10 +1084,9 @@ private void DrawModernBorder(PaintEventArgs e) int cornerRadius = LogicalToDeviceUnits(ModernControlVisualStyles.UpDownCornerRadius); int borderThickness = LogicalToDeviceUnits(ModernControlVisualStyles.BorderThickness); - // The adorner (border) color matches the modern TextBox chrome, which uses the fore color. - Color adornerColor = ForeColor; Color parentBackColor = Parent?.BackColor ?? BackColor; Color clientBackColor = BackColor; + Color adornerColor = ModernControlColorMath.TextControlBorderColor; using var clientBackgroundBrush = clientBackColor.GetCachedSolidBrushScope(); using var adornerPen = adornerColor.GetCachedPenScope(borderThickness); diff --git a/src/System.Windows.Forms/System/Windows/Forms/Rendering/ModernControlColorMath.cs b/src/System.Windows.Forms/System/Windows/Forms/Rendering/ModernControlColorMath.cs index 78832f78731..68013a2b8da 100644 --- a/src/System.Windows.Forms/System/Windows/Forms/Rendering/ModernControlColorMath.cs +++ b/src/System.Windows.Forms/System/Windows/Forms/Rendering/ModernControlColorMath.cs @@ -27,6 +27,11 @@ internal static class ModernControlColorMath private static readonly Color s_darkModeDisabledForeground = Color.FromArgb(0x88, 0x88, 0x88); private static readonly Color s_lightModeDisabledForeground = Color.FromArgb(0xA0, 0xA0, 0xA0); + internal static Color TextControlBorderColor + => Application.IsDarkModeEnabled + ? SystemColors.WindowText + : SystemColors.WindowFrame; + /// /// Gets the surface color for a disabled modern control, honoring the current color mode /// and high contrast settings. diff --git a/src/test/unit/System.Windows.Forms/System/Windows/Forms/ComboBoxTests.cs b/src/test/unit/System.Windows.Forms/System/Windows/Forms/ComboBoxTests.cs index 2af7ac2f04d..856410005c2 100644 --- a/src/test/unit/System.Windows.Forms/System/Windows/Forms/ComboBoxTests.cs +++ b/src/test/unit/System.Windows.Forms/System/Windows/Forms/ComboBoxTests.cs @@ -503,7 +503,7 @@ public void ComboBox_ModernVisualStyles_FramesUseExpectedGeometryAndColor( Color expectedBorder = usesAccent ? Application.SystemVisualSettings.AccentColor - : control.ForeColor; + : ModernControlColorMath.TextControlBorderColor; Assert.True( CountPixels( actual, @@ -642,13 +642,9 @@ public void ComboBox_ModernVisualStyles_Disabled_UsesDisabledBorderAndButtonColo if (flatStyle != FlatStyle.Popup) { - // Standard and Flat use the ForeColor for the border; it must be absent when disabled. Assert.True( - CountPixels(enabledBitmap, customForeColor, channelTolerance: 16) > 0, - "Enabled ComboBox should render border with ForeColor."); - Assert.True( - CountPixels(disabledBitmap, customForeColor, channelTolerance: 16) == 0, - "Disabled ComboBox must not render border with the ForeColor."); + CountPixels(enabledBitmap, ModernControlColorMath.TextControlBorderColor, channelTolerance: 16) > 0, + "Enabled ComboBox should render border with TextControlBorderColor."); Assert.True( CountPixels( disabledBitmap,