using System; using System.Collections.Generic; using System.Windows; using System.Windows.Media; namespace DownKyi.Utils { public static class DictionaryResource { /// <summary> /// 从资源获取颜色的16进制字符串 /// </summary> /// <param name="resourceKey"></param> /// <returns></returns> public static string GetColor(string resourceKey) { return Application.Current == null ? "#00000000" : ((Color)Application.Current.Resources[resourceKey]).ToString(); } /// <summary> /// 从资源获取字符串 /// </summary> /// <param name="resourceKey"></param> /// <returns></returns> public static string GetString(string resourceKey) { return Application.Current == null ? "" : (string)Application.Current.Resources[resourceKey]; } /// <summary> /// 根据languageCode切换界面语言 /// </summary> /// <param name="languageCode">语言-国家代码</param> public static void LoadLanguage(string languageCode) { LoadXamlDictionary(languageCode, "Languages"); } /// <summary> /// 切换主题 /// </summary> /// <param name="theme">主题</param> public static void LoadTheme(string theme) { LoadXamlDictionary(theme, "Themes"); } /// <summary> /// 更换xaml资源字典 /// </summary> /// <param name="fileName">xaml文件名,不包含扩展名</param> /// <param name="package">文件所在包(路径)</param> private static void LoadXamlDictionary(string fileName, string package) { if (string.IsNullOrEmpty(fileName) == false) { var dictionariesToRemove = new List<ResourceDictionary>(); foreach (var dictionary in Application.Current.Resources.MergedDictionaries) { if (dictionary.Source.ToString().Contains($"{package}")) { dictionariesToRemove.Add(dictionary); } } foreach (var item in dictionariesToRemove) { Application.Current.Resources.MergedDictionaries.Remove(item); } var languageDictionary = new ResourceDictionary() { Source = new Uri($"pack://application:,,,/DownKyi;component/{package}/{fileName}.xaml") }; Application.Current.Resources.MergedDictionaries.Add(languageDictionary); } } } }