|
|
@@ -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");
|