From 3c849e051096bee9f7ea87b39d458db6de9ef976 Mon Sep 17 00:00:00 2001 From: Epica3055 <135201996+Epica3055@users.noreply.github.com> Date: Fri, 12 Sep 2025 16:25:28 +0800 Subject: [PATCH] Fix 13829 Dark Mode: Button ForeColor ignored in Dark Mode when FlatStyle is Flat/Popup and Form.ForeColor Is set (#13834) * a simple rename * remove BackColorSet, ForeColorSet. use DefaultForeColor,DefaultBackColor to compare * Revert "remove BackColorSet, ForeColorSet. use DefaultForeColor,DefaultBackColor to compare" This reverts commit 5871984609a48242d95a185a5e890e9f53153ce3. * Revert "a simple rename" This reverts commit 19fc8bf6996ec70c7e9143e45ca8cc4cd9561e4f. * fix comments. use another approach. --- .../PublicAPI.Unshipped.txt | 2 -- .../Forms/Controls/Buttons/ButtonBase.cs | 24 ------------------- .../DarkMode/ButtonDarkModeAdapter.cs | 14 +++++------ 3 files changed, 7 insertions(+), 33 deletions(-) diff --git a/src/System.Windows.Forms/PublicAPI.Unshipped.txt b/src/System.Windows.Forms/PublicAPI.Unshipped.txt index 937f10c2eda..3348c917404 100644 --- a/src/System.Windows.Forms/PublicAPI.Unshipped.txt +++ b/src/System.Windows.Forms/PublicAPI.Unshipped.txt @@ -1,5 +1,3 @@ -override System.Windows.Forms.ButtonBase.OnBackColorChanged(System.EventArgs! e) -> void -override System.Windows.Forms.ButtonBase.OnForeColorChanged(System.EventArgs! e) -> void static System.Windows.Forms.Application.SetColorMode(System.Windows.Forms.SystemColorMode systemColorMode) -> void static System.Windows.Forms.TaskDialog.ShowDialogAsync(nint hwndOwner, System.Windows.Forms.TaskDialogPage! page, System.Windows.Forms.TaskDialogStartupLocation startupLocation = System.Windows.Forms.TaskDialogStartupLocation.CenterOwner) -> System.Threading.Tasks.Task! static System.Windows.Forms.TaskDialog.ShowDialogAsync(System.Windows.Forms.IWin32Window! owner, System.Windows.Forms.TaskDialogPage! page, System.Windows.Forms.TaskDialogStartupLocation startupLocation = System.Windows.Forms.TaskDialogStartupLocation.CenterOwner) -> System.Threading.Tasks.Task! diff --git a/src/System.Windows.Forms/System/Windows/Forms/Controls/Buttons/ButtonBase.cs b/src/System.Windows.Forms/System/Windows/Forms/Controls/Buttons/ButtonBase.cs index 05626bc91a2..0e96522e4b8 100644 --- a/src/System.Windows.Forms/System/Windows/Forms/Controls/Buttons/ButtonBase.cs +++ b/src/System.Windows.Forms/System/Windows/Forms/Controls/Buttons/ButtonBase.cs @@ -1202,30 +1202,6 @@ protected override void OnKeyDown(KeyEventArgs kevent) base.OnKeyDown(kevent); } - // These two properties are mainly used for ButtonDarkModeAdapter. - internal bool BackColorSet { get; set; } - internal bool ForeColorSet { get; set; } - - protected override void OnForeColorChanged(EventArgs e) - { - base.OnForeColorChanged(e); - if (Application.IsDarkModeEnabled) - { - ForeColorSet = ShouldSerializeForeColor(); - UpdateOwnerDraw(); - } - } - - protected override void OnBackColorChanged(EventArgs e) - { - base.OnBackColorChanged(e); - if (Application.IsDarkModeEnabled) - { - BackColorSet = ShouldSerializeBackColor(); - UpdateOwnerDraw(); - } - } - /// /// Raises the event. /// diff --git a/src/System.Windows.Forms/System/Windows/Forms/Controls/Buttons/ButtonInternal/DarkMode/ButtonDarkModeAdapter.cs b/src/System.Windows.Forms/System/Windows/Forms/Controls/Buttons/ButtonInternal/DarkMode/ButtonDarkModeAdapter.cs index b3b0f8d2e3b..a85dd3ed4cc 100644 --- a/src/System.Windows.Forms/System/Windows/Forms/Controls/Buttons/ButtonInternal/DarkMode/ButtonDarkModeAdapter.cs +++ b/src/System.Windows.Forms/System/Windows/Forms/Controls/Buttons/ButtonInternal/DarkMode/ButtonDarkModeAdapter.cs @@ -29,7 +29,7 @@ private Color GetButtonTextColor(IDeviceContext deviceContext, PushButtonState s { Color textColor; - if (Control.ForeColorSet) + if (Control.ForeColor != Forms.Control.DefaultForeColor) { textColor = new ColorOptions(deviceContext, Control.ForeColor, Control.BackColor) { @@ -51,23 +51,23 @@ private Color GetButtonTextColor(IDeviceContext deviceContext, PushButtonState s private Color GetButtonBackColor(PushButtonState state) { - Color textColor; + Color backColor; - if (Control.BackColorSet) + if (Control.BackColor != Forms.Control.DefaultBackColor) { - textColor = Control.BackColor; + backColor = Control.BackColor; if (IsHighContrastHighlighted()) { - textColor = SystemColors.HighlightText; + backColor = SystemColors.HighlightText; } } else { - textColor = ButtonDarkModeRenderer.GetBackgroundColor(state, Control.IsDefault); + backColor = ButtonDarkModeRenderer.GetBackgroundColor(state, Control.IsDefault); } - return textColor; + return backColor; } internal override void PaintUp(PaintEventArgs e, CheckState state)