dotnet/winforms

[Dark Mode] Some toolstrip colors don't change when switching color mode

Open

#12,027 创建于 2024年8月31日

在 GitHub 查看
 (8 评论) (0 反应) (0 负责人)C# (4,100 star) (922 fork)batch import
area-DarkModehelp wanted

描述

.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): image

Incorrect (when starting the app in light mode, switching to dark mode, and re-creating the form): image

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

贡献者指南