ThemeHelper.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using Avalonia;
  2. using Avalonia.Controls;
  3. using Avalonia.Controls.ApplicationLifetimes;
  4. using Avalonia.Media;
  5. namespace YZWater.Avalonia.Controls;
  6. /// <summary>
  7. /// 涓婚璧勬簮杈呭姪鏂规硶
  8. /// </summary>
  9. internal static class ThemeHelper
  10. {
  11. /// <summary>
  12. /// 浠庡簲鐢ㄨ祫婧愯幏鍙栫敾鍒凤紝鎵句笉鍒板垯杩斿洖榛樿鍊
  13. /// </summary>
  14. public static IBrush GetBrush(string key, string fallbackHex)
  15. {
  16. try
  17. {
  18. // 閬嶅巻鎵鏈 MergedDictionaries 鏌ユ壘璧勬簮
  19. var app = Application.Current;
  20. if (app?.Resources?.MergedDictionaries != null)
  21. {
  22. foreach (var dict in app.Resources.MergedDictionaries)
  23. {
  24. if (dict.TryGetResource(key, null, out var value) && value is IBrush brush)
  25. return brush;
  26. }
  27. }
  28. // 灏濊瘯浠庢牴璧勬簮鏌ユ壘
  29. if (app != null && app.Resources.TryGetResource(key, null, out var rootValue) && rootValue is IBrush rootBrush)
  30. return rootBrush;
  31. }
  32. catch { }
  33. return new SolidColorBrush(Color.Parse(fallbackHex));
  34. }
  35. /// <summary>
  36. /// 閫氱煡鎵鏈夋帶浠堕噸缁橈紙鍦ㄤ富棰樺垏鎹㈠悗璋冪敤锛
  37. /// </summary>
  38. public static void InvalidateAll()
  39. {
  40. if (Application.Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
  41. {
  42. foreach (var window in desktop.Windows)
  43. {
  44. window.InvalidateVisual();
  45. }
  46. }
  47. }
  48. // 甯哥敤蹇嵎鏂规硶
  49. public static IBrush AppBg() => GetBrush("AppBgBrush", "#0A0E14");
  50. public static IBrush SurfaceBg() => GetBrush("SurfaceBgBrush", "#111820");
  51. public static IBrush PanelBg() => GetBrush("PanelBgBrush", "#0D1117");
  52. public static IBrush Border() => GetBrush("BorderBrush", "#1C2333");
  53. public static IBrush TextPrimary() => GetBrush("TextPrimaryBrush", "#E6EDF3");
  54. public static IBrush TextSecondary() => GetBrush("TextSecondaryBrush", "#9CA3AF");
  55. public static IBrush TextTertiary() => GetBrush("TextTertiaryBrush", "#6B7280");
  56. public static IBrush TextDisabled() => GetBrush("TextDisabledBrush", "#4B5563");
  57. public static IBrush Success() => GetBrush("SuccessBrush", "#00897B");
  58. public static IBrush Warning() => GetBrush("WarningBrush", "#F59E0B");
  59. public static IBrush Danger() => GetBrush("DangerBrush", "#EF4444");
  60. public static IBrush Info() => GetBrush("InfoBrush", "#3B82F6");
  61. public static IBrush HeaderBg() => GetBrush("HeaderBgBrush", "#111820");
  62. public static IBrush HeaderText() => GetBrush("HeaderTextBrush", "#E6EDF3");
  63. public static IBrush HeaderSubtext() => GetBrush("HeaderSubtextBrush", "#9CA3AF");
  64. public static IBrush NavBg() => GetBrush("NavBgBrush", "#111820");
  65. }