Skip to content

Enable DataGridView dark mode theming via AppContext switch - #14267

Merged
LeafShi1 merged 8 commits into
dotnet:mainfrom
LeafShi1:Issue_14266_Add_DarkThemeExtensions
Sep 1, 2026
Merged

Enable DataGridView dark mode theming via AppContext switch#14267
LeafShi1 merged 8 commits into
dotnet:mainfrom
LeafShi1:Issue_14266_Add_DarkThemeExtensions

Conversation

@LeafShi1

@LeafShi1 LeafShi1 commented Feb 4, 2026

Copy link
Copy Markdown
Member

Fixes #14266

Proposed changes

  • Introduce an AppContext quirk switch System.Windows.Forms.DataGridViewDarkModeTheming (exposed via LocalAppContextSwitches / AppContextSwitches) to control whether DataGridView uses dark-mode-specific theming, defaulting to enabled for .NET 10 and allowing apps to opt out.
  • Add ApplyDarkModeTheming in DataGridView and call it only when dark mode is active and the new switch is enabled, centralizing the dark palette (background, gridlines, header/row colors) for high contrast on dark backgrounds.
  • Update DataGridView painting logic for several cell types—core cells, checkbox cells, combo box cells, and column header cells (sort glyphs)—to use adjusted colors and rendering that remain legible and visually correct in dark mode.
  • Improve DataGridViewLinkCell in dark mode by using shared LinkUtilities link colors (aligned with LinkLabel’s dark colors) and ensuring selected links render with appropriate selection foreground color for sufficient contrast.
  • Keep existing light-mode/legacy behavior unchanged when the AppContext switch is disabled, so existing applications can retain their current appearance without code changes.

Customer Impact

  • Users get a DataGridView that automatically renders with readable, high-contrast colors in dark mode by default, while app developers can still opt out via an AppContext switch to preserve existing light-themed behavior if needed.

Regression?

  • No

Risk

  • Minimal

Screenshots

Before

image

After

image

Test methodology

  • Manually

Test environment(s)

  • 11.0.0-preview.2.26080.101
Microsoft Reviewers: Open in CodeFlow

@codecov

codecov Bot commented Feb 5, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 4.61538% with 248 lines in your changes missing coverage. Please review.
✅ Project coverage is 77.16791%. Comparing base (9b546b7) to head (dcf698f).
⚠️ Report is 11 commits behind head on main.

Additional details and impacted files
@@                 Coverage Diff                 @@
##                main      #14267         +/-   ##
===================================================
- Coverage   77.18395%   77.16791%   -0.01604%     
===================================================
  Files           3279        3279                 
  Lines         645138      645263        +125     
  Branches       47730       47755         +25     
===================================================
- Hits          497943      497936          -7     
- Misses        143503      143631        +128     
- Partials        3692        3696          +4     
Flag Coverage Δ
Debug 77.16791% <4.61538%> (-0.01604%) ⬇️
integration 18.98655% <1.92308%> (-0.00409%) ⬇️
production 52.03815% <4.61538%> (-0.02504%) ⬇️
test 97.40479% <ø> (ø)
unit 49.49919% <4.61538%> (-0.00344%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@LeafShi1 LeafShi1 changed the title Add theming API and improve selection/grid readability Enable DataGridView dark mode theming via AppContext switch Feb 12, 2026
@LeafShi1
LeafShi1 marked this pull request as ready for review February 12, 2026 09:54
@LeafShi1
LeafShi1 requested a review from a team as a code owner February 12, 2026 09:54

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces dark mode theming for the DataGridView control via an AppContext switch (System.Windows.Forms.DataGridViewDarkModeTheming), defaulting to enabled for .NET 10+. The changes provide better visual appearance and contrast in dark mode while preserving opt-out capability for backward compatibility.

Changes:

  • Added AppContext switch to control DataGridView dark mode theming, with inheritance through style system
  • Implemented dark mode rendering for multiple cell types including link cells, combo box cells, checkbox cells, and column header sort glyphs
  • Added shared dark mode link colors to LinkUtilities for consistent link rendering across the DataGridView

Reviewed changes

Copilot reviewed 10 out of 10 changed files in this pull request and generated 31 comments.

Show a summary per file
File Description
src/System.Windows.Forms.Primitives/src/System/LocalAppContextSwitches/LocalAppContextSwitches.cs Added DataGridViewDarkModeTheming switch with .NET 10+ default
src/System.Windows.Forms/System/Windows/Forms/Controls/Labels/LinkUtilities.cs Added dark mode color constants for links
src/System.Windows.Forms/System/Windows/Forms/Controls/DataGridView/DataGridViewLinkCell.cs Implemented dark mode link colors with proper selection handling
src/System.Windows.Forms/System/Windows/Forms/Controls/DataGridView/DataGridViewComboBoxCell.DataGridViewComboBoxCellRenderer.cs Added dark mode rendering for combo box dropdown and readonly buttons
src/System.Windows.Forms/System/Windows/Forms/Controls/DataGridView/DataGridViewColumnHeaderCell.cs Refactored sort glyph rendering to support solid white glyphs in dark mode
src/System.Windows.Forms/System/Windows/Forms/Controls/DataGridView/DataGridViewCheckBoxCell.cs Switched to CheckBoxRenderer.DrawCheckBoxWithVisualStyles for dark mode support
src/System.Windows.Forms/System/Windows/Forms/Controls/DataGridView/DataGridViewCellStyle.cs Added SortGlyphColor property to allow customization of sort arrow color
src/System.Windows.Forms/System/Windows/Forms/Controls/DataGridView/DataGridViewCell.cs Enhanced GetContrastedColors to provide better contrast in dark mode
src/System.Windows.Forms/System/Windows/Forms/Controls/DataGridView/DataGridView.Methods.cs Added ApplyDarkModeTheming method and integration in OnHandleCreated
src/System.Windows.Forms/PublicAPI.Unshipped.txt Documented new SortGlyphColor public API

@dotnet-policy-service dotnet-policy-service Bot removed the draft draft PR label Feb 12, 2026
@LeafShi1 LeafShi1 added the waiting-review This item is waiting on review by one or more members of team label Apr 22, 2026
@KlausLoeffelmann

Copy link
Copy Markdown
Member

@LeafShi1, let's rebase this, and then take this.
I am approving, and it can after the Rebase go in, without me having to see it again.
Let's make sure, we docu the Quirk, though.
@adegeo FYI.

@LeafShi1
LeafShi1 force-pushed the Issue_14266_Add_DarkThemeExtensions branch from 2a57bfa to 28e82ab Compare August 31, 2026 06:56
@LeafShi1
LeafShi1 enabled auto-merge (squash) August 31, 2026 08:03
@LeafShi1
LeafShi1 requested review from ricardobossan and removed request for merriemcgaw August 31, 2026 08:03
@LeafShi1
LeafShi1 requested a review from SimonZhao888 August 31, 2026 08:03
@LeafShi1

LeafShi1 commented Aug 31, 2026

Copy link
Copy Markdown
Member Author

@LeafShi1, let's rebase this, and then take this. I am approving, and it can after the Rebase go in, without me having to see it again. Let's make sure, we docu the Quirk, though. @adegeo FYI.

Besides this Quirk, there are 9 other Quirks without documentation. I submitted a new PR #15010 for these quirks. Please review.

@LeafShi1
LeafShi1 force-pushed the Issue_14266_Add_DarkThemeExtensions branch from d5ca8bb to 28e82ab Compare August 31, 2026 09:13
@LeafShi1
LeafShi1 merged commit b8acee9 into dotnet:main Sep 1, 2026
8 checks passed
@dotnet-policy-service dotnet-policy-service Bot removed the waiting-review This item is waiting on review by one or more members of team label Sep 1, 2026
@LeafShi1
LeafShi1 deleted the Issue_14266_Add_DarkThemeExtensions branch September 1, 2026 01:27
@dotnet-milestone-bot dotnet-milestone-bot Bot added this to the 12.0-preview1 milestone Sep 2, 2026
abineshPalanisamy pushed a commit to abineshPalanisamy/winforms that referenced this pull request Sep 3, 2026
…4267)

## Proposed changes

-  Introduce an AppContext quirk switch `System.Windows.Forms.DataGridViewDarkModeTheming` (exposed via LocalAppContextSwitches / AppContextSwitches) to control whether DataGridView uses dark-mode-specific theming, defaulting to **enabled** for .NET 10 and allowing apps to opt out.
- Add `ApplyDarkModeTheming` in DataGridView and call it only when dark mode is active and the new switch is enabled, centralizing the dark palette (background, gridlines, header/row colors) for high contrast on dark backgrounds.
- Update DataGridView painting logic for several cell types—core cells, checkbox cells, combo box cells, and column header cells (**sort glyphs**)—to use adjusted colors and rendering that remain legible and visually correct in dark mode.
- Improve DataGridViewLinkCell in dark mode by using shared `LinkUtilities` link colors (aligned with LinkLabel’s dark colors) and ensuring selected links render with appropriate selection foreground color for sufficient contrast.
- Keep existing light-mode/legacy behavior unchanged when the AppContext switch is disabled, so existing applications can retain their current appearance without code changes.

## Customer Impact

- Users get a DataGridView that automatically renders with readable, high-contrast colors in dark mode by default, while app developers can still opt out via an AppContext switch to preserve existing light-themed behavior if needed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Dark Mode] DataGridView Dark Mode default colors look inconsistent and visually unbalanced

4 participants