using System.Collections.ObjectModel; using System.Reflection; using WPFluent.Extensions; namespace WPFluent.Appearance; /// /// 管理资源字典 /// internal class ResourceDictionaryManager { /// /// 获取命名空间,例如正在搜索的资源库。 /// private string SearchNamespace { get; } = Assembly.GetExecutingAssembly().GetName().Name; /// /// 查找资源 /// /// 任何部分的资源名称。 /// , 如果不存在,返回null public ResourceDictionary? LookupDictionary(string resourceLookup) { Collection applicationDictionaries = ThemeManager.Current.Resources.MergedDictionaries; if (applicationDictionaries.Count == 0) { return null; } foreach (ResourceDictionary t in applicationDictionaries) { string resourceDictionaryUri; if (t?.Source != null) { resourceDictionaryUri = t.Source.ToString(); if (resourceDictionaryUri.Contains(SearchNamespace, StringComparison.OrdinalIgnoreCase) && resourceDictionaryUri.Contains(resourceLookup, StringComparison.OrdinalIgnoreCase)) { return t; } } foreach (ResourceDictionary? t1 in t!.MergedDictionaries) { if (t1?.Source == null) { continue; } resourceDictionaryUri = t1.Source.ToString(); if (!resourceDictionaryUri.Contains(SearchNamespace, StringComparison.OrdinalIgnoreCase) || !resourceDictionaryUri.Contains(resourceLookup, StringComparison.OrdinalIgnoreCase)) { continue; } return t1; } } return null; } /// /// 更新应用程序中的资源字典 /// /// 要查找的资源名称的一部分 /// 用于替换的新资源的有效Uri /// 如果字典Uri已更新则返回true,否则返回false public bool UpdateDictionary(string resourceLookup, Uri? newResourceUri) { // 获取应用程序的合并资源字典集合 var applicationDictionaries = ThemeManager .Current .Resources .MergedDictionaries; // 如果没有资源字典或新的Uri为空,则返回false if (applicationDictionaries.Count == 0 || newResourceUri is null) { return false; } // 遍历顶层资源字典 for (var i = 0; i < applicationDictionaries.Count; i++) { string sourceUri; // 检查当前资源字典是否有Source if (applicationDictionaries[i]?.Source != null) { sourceUri = applicationDictionaries[i].Source.ToString(); // 检查资源Uri是否匹配搜索条件 if (sourceUri.Contains(SearchNamespace, StringComparison.OrdinalIgnoreCase) && sourceUri.Contains(resourceLookup, StringComparison.OrdinalIgnoreCase)) { // 使用新的Uri更新资源字典 applicationDictionaries[i] = new() { Source = newResourceUri }; return true; } } // 遍历合并的子资源字典 for (var j = 0; j < applicationDictionaries[i].MergedDictionaries.Count; j++) { if (applicationDictionaries[i].MergedDictionaries[j]?.Source == null) { continue; } sourceUri = applicationDictionaries[i].MergedDictionaries[j].Source.ToString(); // 检查子资源字典Uri是否匹配搜索条件 if (!sourceUri.Contains(SearchNamespace, StringComparison.OrdinalIgnoreCase) || !sourceUri.Contains(resourceLookup, StringComparison.OrdinalIgnoreCase)) { continue; } // 使用新的Uri更新子资源字典 applicationDictionaries[i].MergedDictionaries[j] = new ResourceDictionary { Source = newResourceUri }; return true; } } // 未找到匹配的资源字典,返回false return false; } }