Bladeren bron

淇娴呰壊涓婚鎺т欢涓嶈窡闅 - ThemeHelper閬嶅巻MergedDictionaries + 寮哄埗閲嶇粯

纾 鏇 1 week geleden
bovenliggende
commit
edc1ea533e
2 gewijzigde bestanden met toevoegingen van 37 en 3 verwijderingen
  1. 9 0
      src/YZWater.Avalonia/App.axaml.cs
  2. 28 3
      src/YZWater.Avalonia/Controls/ThemeHelper.cs

+ 9 - 0
src/YZWater.Avalonia/App.axaml.cs

@@ -48,5 +48,14 @@ public partial class App : Application
         if (resources.Count == 0 || _darkTheme == null || _lightTheme == null) return;
 
         resources[0] = ThemeService.Instance.IsDarkTheme ? _darkTheme : _lightTheme;
+
+        // 寮哄埗鎵鏈夌獥鍙i噸缁
+        if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
+        {
+            foreach (var window in desktop.Windows)
+            {
+                window.InvalidateVisual();
+            }
+        }
     }
 }

+ 28 - 3
src/YZWater.Avalonia/Controls/ThemeHelper.cs

@@ -1,5 +1,6 @@
 using Avalonia;
 using Avalonia.Controls;
+using Avalonia.Controls.ApplicationLifetimes;
 using Avalonia.Media;
 
 namespace YZWater.Avalonia.Controls;
@@ -16,14 +17,38 @@ internal static class ThemeHelper
     {
         try
         {
-            var resources = Application.Current?.Resources;
-            if (resources != null && resources.TryGetResource(key, null, out var value) && value is IBrush brush)
-                return brush;
+            // 閬嶅巻鎵鏈 MergedDictionaries 鏌ユ壘璧勬簮
+            var app = Application.Current;
+            if (app?.Resources?.MergedDictionaries != null)
+            {
+                foreach (var dict in app.Resources.MergedDictionaries)
+                {
+                    if (dict.TryGetResource(key, null, out var value) && value is IBrush brush)
+                        return brush;
+                }
+            }
+            // 灏濊瘯浠庢牴璧勬簮鏌ユ壘
+            if (app != null && app.Resources.TryGetResource(key, null, out var rootValue) && rootValue is IBrush rootBrush)
+                return rootBrush;
         }
         catch { }
         return new SolidColorBrush(Color.Parse(fallbackHex));
     }
 
+    /// <summary>
+    /// 閫氱煡鎵鏈夋帶浠堕噸缁橈紙鍦ㄤ富棰樺垏鎹㈠悗璋冪敤锛
+    /// </summary>
+    public static void InvalidateAll()
+    {
+        if (Application.Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
+        {
+            foreach (var window in desktop.Windows)
+            {
+                window.InvalidateVisual();
+            }
+        }
+    }
+
     // 甯哥敤蹇嵎鏂规硶
     public static IBrush AppBg() => GetBrush("AppBgBrush", "#0A0E14");
     public static IBrush SurfaceBg() => GetBrush("SurfaceBgBrush", "#111820");