using Avalonia; using Avalonia.Controls; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Media; namespace YZWater.Avalonia.Controls; /// /// 主题资源辅助方法 /// internal static class ThemeHelper { /// /// 从应用资源获取画刷,找不到则返回默认值 /// 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)); } /// /// 通知所有控件重绘(在主题切换后调用) /// 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"); }