在wpf程序中如何实现主题变换,首先我们需要先思考主题切换都更改了一些什么,无非就是字体颜色,背景颜色等一些资源
当我们了解了主题变换的本质后就能够进一步去实现它,众所周知,在wpf中我们可以通过资源绑定的形式去实现颜色,字体,样式等一些资源绑定,在wpf中如果有相同的key通常会绑定最后加载的那一个资源,这个时候我们可以通过定义2个资源文件去实现一些主题的变换
1.在App.xml中先添加2个资源文件
<ResourceDictionary Source="pack://application:,,,/wpf1;component/白色主题.xaml"/>
<ResourceDictionary Source="pack://application:,,,/wpf1;component/黑色主题.xaml"/>
2.在不同的主题资源中定义不同的颜色
白色主题
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<SolidColorBrush x:Key="背景颜色" Color="White"/>
</ResourceDictionary>
黑色主题
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<SolidColorBrush x:Key="背景颜色" Color="Black"/>
</ResourceDictionary>
3.在界面中通过动态资源的形式去绑定颜色
<Border Background="{DynamicResource 背景颜色}"/>
4.定义一个资源集合的变量,在程序加载时将所有的资源放到资源集合中
List<ResourceDictionary> dictionaryList = new List<ResourceDictionary>();
//在构造函数或者是加载事件中添加
foreach (ResourceDictionary dictionary in Application.Current.Resources.MergedDictionaries)
{
dictionaryList.Add(dictionary);
}
5.当我们点击切换主题时找到想要切换的主题,先把他移除掉,然后再添加进去,这样你想要切换的资源就变成了最后需要显示的资源
string requestedCulture = @"pack://application:,,,/wpf1;component/白色主题.xaml";
ResourceDictionary resourceDictionary =
dictionaryList.FirstOrDefault(d => d.Source.OriginalString.Equals(requestedCulture));
Application.Current.Resources.MergedDictionaries.Remove(resourceDictionary);
Application.Current.Resources.MergedDictionaries.Add(resourceDictionary);
通过以上步骤我们就已经完成了资源切换,同理,字体,主题等风格都可以使用此方法切换
标签:绑定,Resources,主题,字体,切换,WPF,MergedDictionaries,资源 From: https://blog.csdn.net/balabala___a/article/details/139530588