public void ApplySkin(SkinDescription skin) { var oldSkinDefinition = Application.Current.Properties["CurrentSkin"] as ResourceDictionary; if (oldSkinDefinition != null) { Application.Current.Resources.MergedDictionaries.Remove(oldSkinDefinition); } if (skin.Name != DefaultSkinName) { ResourceDictionary newSkinDefinition = null; var newSkinPath = "Skins/" + skin.Name + "/Style.xaml"; using (FileStream s = File.OpenRead(newSkinPath)) { newSkinDefinition = (ResourceDictionary)XamlReader.Load( s, new ParserContext { BaseUri = new Uri("pack://application:,,,/" + newSkinPath, UriKind.Absolute), }); } if (newSkinDefinition != null) { Application.Current.Resources.MergedDictionaries.Add(newSkinDefinition); Application.Current.Properties["CurrentSkin"] = newSkinDefinition; } } Application.Current.Properties["CurrentSkinDescription"] = LoadSkinDescription(skin.Name) ?? LoadSkinDescription("Default"); }
private SkinDescription LoadSkinDescription(string skinName) { SkinDescription skinDescription = null; var skinPath = "Skins/" + skinName + "/Description.xaml"; try { skinDescription = Application.LoadComponent(new Uri("/xpdm.Catan;component/" + skinPath, UriKind.Relative)) as SkinDescription; } catch (IOException) { /* Handle IOException by assuming component doesn't exist. Swallow error and trace.*/ Trace.TraceInformation("Skin description '{0}' not a component.", skinName); } if (skinDescription != null) { skinDescription.Name = skinName; return(skinDescription); } if (File.Exists(skinPath)) { using (FileStream s = File.OpenRead(skinPath)) { skinDescription = (SkinDescription)XamlReader.Load(s, new ParserContext { BaseUri = new Uri("pack://application:,,,/" + skinPath, UriKind.Absolute) }); } } if (skinDescription == null) { return(new SkinDescription { Name = skinName, DisplayName = skinName, Preview = (Visual)Application.Current.TryFindResource("DefaultSkinPreview"), }); } skinDescription.Name = skinName; return(skinDescription); }