[Dark Mode] Some toolstrip colors don't change when switching color mode
- Dominant language
- C#
- Stars
- 4.9k
- Forks
- 1.1k
- Avg merge
- 20h 23m
- Merged PRs (30d)
- 103
Description
### .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.
https://github.com/dotnet/winforms/blob/b6695d6cd48019890b785ea32684df47297bc2a5/src/System.Drawing.Common/src/System/Drawing/SystemBrushes.cs#L53
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
1. Start the application with `Application.SetColorMode(SystemColorMode.Classic)`
2. Call `Application.SetColorMode(SystemColorMode.Dark)`
3. Close and re-open a form with a toolbar
4. Observe that ToolStripSeparator and dropdown arrows on ToolStripSplitButton have the wrong color
Contributor guide
Assessment
This issue has not been assessed yet.