| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- using Avalonia;
- using Avalonia.Controls;
- using Avalonia.Controls.ApplicationLifetimes;
- using Avalonia.Media;
- namespace YZWater.Avalonia.Controls;
- /// <summary>
- /// 主题资源辅助方法
- /// </summary>
- internal static class ThemeHelper
- {
- /// <summary>
- /// 从应用资源获取画刷,找不到则返回默认值
- /// </summary>
- public static IBrush GetBrush(string key, string fallbackHex)
- {
- try
- {
- // 遍历所有 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");
- public static IBrush PanelBg() => GetBrush("PanelBgBrush", "#0D1117");
- public static IBrush Border() => GetBrush("BorderBrush", "#1C2333");
- public static IBrush TextPrimary() => GetBrush("TextPrimaryBrush", "#E6EDF3");
- public static IBrush TextSecondary() => GetBrush("TextSecondaryBrush", "#9CA3AF");
- public static IBrush TextTertiary() => GetBrush("TextTertiaryBrush", "#6B7280");
- public static IBrush TextDisabled() => GetBrush("TextDisabledBrush", "#4B5563");
- public static IBrush Success() => GetBrush("SuccessBrush", "#00897B");
- public static IBrush Warning() => GetBrush("WarningBrush", "#F59E0B");
- public static IBrush Danger() => GetBrush("DangerBrush", "#EF4444");
- public static IBrush Info() => GetBrush("InfoBrush", "#3B82F6");
- public static IBrush HeaderBg() => GetBrush("HeaderBgBrush", "#111820");
- public static IBrush HeaderText() => GetBrush("HeaderTextBrush", "#E6EDF3");
- public static IBrush HeaderSubtext() => GetBrush("HeaderSubtextBrush", "#9CA3AF");
- public static IBrush NavBg() => GetBrush("NavBgBrush", "#111820");
- }
|