[Dark Mode] Some toolstrip colors don't change when switching color mode
#12,027 opened on 2024年8月31日
説明
.NET version
9.0.100-rc.2.24430.10
Did it work in .NET Framework?
No
Did it work in any of the earlier releases of .NET Core or .NET 5+?
Dark mode is a new feature in net9
Issue description
Some toolstrip colors don't change when the SystemColorMode is changed while the app is running, even after re-creating the form. (It works fine when setting the SystemColorMode at app start.)
Correct (when starting the app in dark mode):
Incorrect (when starting the app in light mode, switching to dark mode, and re-creating the form):
I believe the root cause of the issue is here, where there is a static cache of brushes with an index based on the KnownColor enum (e.g. KnownColor.ControlText). I imagine the solution involves purging these caches when the color mode is changed.
Also here has a similar problem, though I haven't evaluated if there are further impacts from these static caches. https://github.com/dotnet/winforms/blob/b6695d6cd48019890b785ea32684df47297bc2a5/src/System.Drawing.Common/src/System/Drawing/SystemPens.cs#L54
Steps to reproduce
- Start the application with
Application.SetColorMode(SystemColorMode.Classic) - Call
Application.SetColorMode(SystemColorMode.Dark) - Close and re-open a form with a toolbar
- Observe that ToolStripSeparator and dropdown arrows on ToolStripSplitButton have the wrong color