internal override void ProcessXamlResource(XamlResourceInfo resource) { if (resource.IsDeferred) { return; } var resourceDictionary = resource.EnsureResourceDictionary(); if (resourceDictionary == null) { return; } if (ProcessedResourceDictionaries.Contains(resourceDictionary)) { return; } var skinResourceDictionary = resource.ResourceDictionary as ThemeSkinResourceDictionary; if (skinResourceDictionary != null) { ProcessSkinResourceDictionary(skinResourceDictionary); } }
internal override bool ShouldProcessXamlResource(XamlResourceInfo resource) { return(base.ShouldProcessXamlResource(resource) || MasterTheme.ShouldProcessXamlResource(resource)); }
internal override void ProcessXamlResource(XamlResourceInfo resource) { SkinnedTheme.ProcessXamlResource(resource); }
internal override bool IsThemeResource(XamlResourceInfo resource) { return(resource.ThemeType == GetType() || resource.ThemeType == BaseThemeCore?.GetType()); }
private void LoadThemeAssembly(Assembly assembly, List <XamlResourceInfo> newXamlResources) { if (assembly.HasAttribute <ThemeAssemblyAttribute>(false) == false) { return; } var resourceGroups = new List <ResourceGroup>(); foreach (var themeAssemblyAttribute in assembly.GetAttributes <ThemeAssemblyAttribute>()) { var resourcePath = themeAssemblyAttribute.Source; if (resourcePath.EndsWith(".zip", StringComparison.OrdinalIgnoreCase)) { #if !SILVERLIGHT var stream = assembly.GetResourceStream(resourcePath); using var archive = new ZipArchive(stream); foreach (var entry in archive.Entries) { if (!entry.Name.EndsWith(".dll", StringComparison.OrdinalIgnoreCase)) { continue; } using var entryStream = entry.Open(); using var ms = new MemoryStream(); entryStream.CopyTo(ms); var themeAssembly = Assembly.Load(ms.ToArray()); LoadThemeAssemblies(new[] { themeAssembly }); } #endif } else { var themeUri = ResourceDictionaryUtils.CreateAbsoluteUri(assembly.GetResourcePathUri(resourcePath)); resourceGroups.Add(new ResourceGroup(themeAssemblyAttribute.ThemeType, themeUri)); } } foreach (var resourceUri in assembly.EnumerateEmbeddedResources().Select(assembly.GetResourceUri).Where(ResourceDictionaryUtils.IsXamlOrBamlResource)) { var absoluteResourceUri = ResourceDictionaryUtils.CreateAbsoluteUri(resourceUri); foreach (var resourceGroup in resourceGroups) { if (resourceGroup.BaseUri.IsBaseOf(absoluteResourceUri) == false) { continue; } resourceGroup.Resources.Add(resourceUri); break; } } foreach (var resourceGroup in resourceGroups) { var deferredDictionary = new Dictionary <string, Uri>(StringComparer.OrdinalIgnoreCase); foreach (var uri in resourceGroup.Resources.WhereNot(ExcludeResource)) { if (IsDeferredResourceDictionary(uri)) { deferredDictionary[GetNonDeferredUri(uri).OriginalString] = uri; } } foreach (var uri in resourceGroup.Resources.WhereNot(ExcludeResource)) { if (IsDeferredResourceDictionary(uri)) { continue; } var deferredUri = deferredDictionary.GetValueOrDefault(uri.OriginalString); var deferredResourceDictionary = deferredUri != null?UpdateResourceDictionaryMetadata(ResourceDictionaryUtils.LoadResourceDictionary(deferredUri), deferredUri, true) : null; var xamlResourceInfo = new XamlResourceInfo(assembly, resourceGroup.ThemeType, uri, CacheLoadResourceDictionary, deferredResourceDictionary); newXamlResources.Add(xamlResourceInfo); _xamlResources.Add(xamlResourceInfo); } } }