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