WPF点滴之合并资源与动态换肤
合并多个外部资源字典成为本地字典
示例代码
<ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="1.xmal"></ResourceDictionary> <ResourceDictionary Source="2.xmal"></ResourceDictionary> </ResourceDictionary.MergedDictionaries> </ResourceDictionary>
描述
合并多个外部资源字典成为本地字典。当需要合并更多字典的时候只要在ResourceDictionary.MergedDictionaries节中顺序增加引用。
特别提示
合并字典(MergedDictionaries 集合中的字典)中对同一对象的同一子元素进行定义的时候,会产生覆盖效果:在这种情况下,所返回的资源将来自在 MergedDictionaries 集合中最后一个找到的字典。(在这里会显示myresourcedictionary2.xaml中的定义)。
合并字典(MergedDictionaries 集合中的字典)中对同一对象的不同子元素定义的时候会产生叠加效果。
动态换肤,也就是后台更改合并资源
合并资源放在APP级:
Application.Current.Resources.MergedDictionaries.Clear(); ResourceDictionary newRD = new ResourceDictionary(); newRD.Source = new Uri("1.xaml", UriKind.Relative); Application.Current.Resources.MergedDictionaries.Add(newRD);
合并资源放在Window级:
this.Resources.MergedDictionaries.Clear(); ResourceDictionary newRD = new ResourceDictionary(); newRD.Source = new Uri("1.xaml", UriKind.Relative); this.Resources.MergedDictionaries.Add(newRD);
如果有多个资源合并在一起,只想更改某个资源,可以这样更改
ResourceDictionary newRD = new ResourceDictionary(); newRD.Source = new Uri("1.xaml", UriKind.Relative); Application.Current.Resources.MergedDictionaries[0] = newRD;