From afb28ecb923f0d14b6402daf3d4e7f95f875a5e5 Mon Sep 17 00:00:00 2001 From: Mike James Date: Mon, 13 Jul 2026 16:28:47 +0200 Subject: [PATCH] Fixed the dark theme. --- samples/ControlCatalog/Assets/Icon.png | Bin 14349 -> 8988 bytes .../Accents/BaseResources.xaml | 8 +- .../Controls/DrawerPage.xaml | 228 +++++++++++++----- .../Controls/NavigationPage.xaml | 12 +- .../Controls/TabbedPage.xaml | 27 ++- .../KeyParityTests.cs | 53 ++++ 6 files changed, 259 insertions(+), 69 deletions(-) diff --git a/samples/ControlCatalog/Assets/Icon.png b/samples/ControlCatalog/Assets/Icon.png index 41a2a618fb02e4cb7f6a15caf572b693bfe1ebb1..4e60afcc59a9538fead0f1da8815ee2f12cd603f 100644 GIT binary patch literal 8988 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 P|81zOs1C1$nFaqJA3&u& literal 14349 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 - - + + @@ -260,8 +260,8 @@ Color="{StaticResource SystemChromeMediumLowColor}" /> - - + + diff --git a/src/Avalonia.Themes.Fluent2/Controls/DrawerPage.xaml b/src/Avalonia.Themes.Fluent2/Controls/DrawerPage.xaml index 26d991de24..06fe9303b1 100644 --- a/src/Avalonia.Themes.Fluent2/Controls/DrawerPage.xaml +++ b/src/Avalonia.Themes.Fluent2/Controls/DrawerPage.xaml @@ -10,41 +10,140 @@ + + + M3 17h18a1 1 0 0 1 .117 1.993L21 19H3a1 1 0 0 1-.117-1.993L3 17h18H3Zm0-6 18-.002a1 1 0 0 1 .117 1.993l-.117.007L3 13a1 1 0 0 1-.117-1.993L3 11l18-.002L3 11Zm0-6h18a1 1 0 0 1 .117 1.993L21 7H3a1 1 0 0 1-.117-1.993L3 5h18H3Z + 48 - + + + + 40 + 36 + 4,2 + 0,4 + 1,1,0,0 + 8,0,0,0 + 0,1,0,0 + 0 + 0,1,0,0 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + - - + + - - + + + - - - - - @@ -106,6 +195,8 @@ - - - - - @@ -157,6 +236,8 @@ + + + + + + + + + + + + + + + + + @@ -210,7 +333,10 @@ - + + @@ -218,7 +344,7 @@ - + @@ -226,39 +352,29 @@ + - - - - - - - - - - - - + diff --git a/src/Avalonia.Themes.Fluent2/Controls/NavigationPage.xaml b/src/Avalonia.Themes.Fluent2/Controls/NavigationPage.xaml index 2eb606d4da..2e0072aea5 100644 --- a/src/Avalonia.Themes.Fluent2/Controls/NavigationPage.xaml +++ b/src/Avalonia.Themes.Fluent2/Controls/NavigationPage.xaml @@ -1,5 +1,15 @@ + + + + + + + + + + @@ -10,8 +20,6 @@ M12.7347,4.20949 C13.0332,3.92233 13.508,3.93153 13.7952,4.23005 C14.0823,4.52857 14.0731,5.00335 13.7746,5.29051 L5.50039,13.25 L24.2532,13.25 C24.6674,13.25 25.0032,13.5858 25.0032,13.9999982 C25.0032,14.4142 24.6674,14.75 24.2532,14.75 L5.50137,14.75 L13.7746,22.7085 C14.0731,22.9957 14.0823,23.4705 13.7952,23.769 C13.508,24.0675 13.0332,24.0767 12.7347,23.7896 L3.30673,14.7202 C2.89776,14.3268 2.89776,13.6723 3.30673,13.2788 L12.7347,4.20949 Z - - diff --git a/src/Avalonia.Themes.Fluent2/Controls/TabbedPage.xaml b/src/Avalonia.Themes.Fluent2/Controls/TabbedPage.xaml index 23e46f4c06..b92731dd3b 100644 --- a/src/Avalonia.Themes.Fluent2/Controls/TabbedPage.xaml +++ b/src/Avalonia.Themes.Fluent2/Controls/TabbedPage.xaml @@ -1,5 +1,25 @@ + + + + + + + + + + + + + + + + + + + + @@ -19,16 +39,11 @@ - - - - - 3 18 @@ -48,10 +63,8 @@ - 0 0,1,0,0 - 0 0 diff --git a/tests/Avalonia.Themes.Fluent2.UnitTests/KeyParityTests.cs b/tests/Avalonia.Themes.Fluent2.UnitTests/KeyParityTests.cs index 4b3576d121..55ee6d8c5f 100644 --- a/tests/Avalonia.Themes.Fluent2.UnitTests/KeyParityTests.cs +++ b/tests/Avalonia.Themes.Fluent2.UnitTests/KeyParityTests.cs @@ -112,6 +112,59 @@ public class KeyParityTests "Compact density keys missing in Fluent2: " + string.Join(", ", missing)); } + [AvaloniaFact] + public void Window_scoped_dark_variant_resolves_same_values_as_theme_dark() + { + // Regression guard: brushes defined outside ThemeDictionaries that wrap + // variant-scoped colors anchor to the app variant instead of the consumer's + // scope. Every key must resolve identically whether dark is requested at + // theme level or via a window-scoped RequestedThemeVariant override. + var theme = new Fluent2Theme(); + var app = Application.Current!; + app.Styles.Add(theme); + var window = new Window + { + RequestedThemeVariant = ThemeVariant.Dark, + Content = new ContentControl(), + }; + window.Show(); + try + { + var control = (ContentControl)window.Content!; + var problems = new List(); + foreach (var key in ThemeResourceWalker.CollectKeys(theme)) + { + if (!((IResourceNode)theme).TryGetResource(key, ThemeVariant.Dark, out var expected)) + continue; + if (expected is not (IBrush or Color)) + continue; + control.TryFindResource(key, control.ActualThemeVariant, out var actual); + var expectedText = Describe(expected); + var actualText = Describe(actual); + if (expectedText != actualText) + problems.Add($"{key}: theme-dark={expectedText} window-dark={actualText}"); + } + + Assert.True(problems.Count == 0, + $"{problems.Count} keys resolve differently under window-scoped dark:\n" + + string.Join("\n", problems.Take(30))); + } + finally + { + window.Close(); + app.Styles.Remove(theme); + } + } + + private static string Describe(object? value) => value switch + { + ISolidColorBrush b => $"solid:{b.Color}", + Color c => $"color:{c}", + IBrush b => $"{b.GetType().Name}:{b.GetHashCode()}", + null => "null", + _ => value.GetType().Name, + }; + private static ResourceDictionary GetCompactStyles(object theme) { // Both themes stash the keyed CompactStyles dictionary in a private field;