首页 > 编程语言 >在WPF程序中如何实现主题,字体的切换

在WPF程序中如何实现主题,字体的切换

时间:2024-06-07 17:00:30浏览次数:24  
标签:绑定 Resources 主题 字体 切换 WPF MergedDictionaries 资源

在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

相关文章

  • Python爬虫-字体加密 ddddocr FontCreator
    目录应用场景解决思路1.下载字体文件2.分析3.代码实现版本1版本2应用场景在爬取网页数据时我们有时可能会遇到如下面的情况,价格数字在网页上能正常显示,但在控制面板查看时却是显示空白,我们通过requests等库爬取该页面后得到的数据也是无法显示出来。解决思路1.......
  • idea,webstorm切换远程仓库
    当有一个老的项目需要从新上传到一个新的git地址,或者上传到云效上面,可以参考1:首先把setting->VersionControl->directoryMappings下面的仓库删除2,如果发现菜单栏的vcs不显示,双击shift,输入Mainmenu   3:选择 CreateGitRepository,创建git本地仓库   选择......
  • Android 水平滚动List 一项Item占满一页宽 设定单次滑动一次切换一次Item
    背景:水平滚动的List,一项Item占满页面宽度,相当于数量不定的选项卡,每个选项卡占满一页,左右滑动时,如何限制一次只能滑动一个Item步骤:1.水平滚动布局linearLayoutManager=newLinearLayoutManager(this);linearLayoutManager.setOrientation(LinearLayoutMana......
  • Python中的“点阵字体”
    “点阵字体”是个啥?,在python中怎么使?在现在全面高清的5G5G5G时代,它还有用“武”之地?(笔记模板由python脚本于2024年06月01日18:44:31创......
  • LVGL(二)切换页面,同时清理内存,异常总结之动画删除
    项目场景:LVGL切换页面时,出现异常问题的总结。这里假设有2个页面,一个页面是启动页面,一个是密码盘页面。都有几十个部件,包含样式,动画,事件等。使用squareline生成代码。两个页面中都有一个按钮可以互相切换到另外一个页面。作者已经运行测试过了,切换页面,同时清除内存,再也没有......
  • Web应用课 第三讲 文本、字体、背景、边框、展示格式
    文本对齐方式text-alignCSS属性定义行内内容(例如文字)如何相对它的块父元素对齐。text-align并不控制块元素自己的对齐,只控制它的行内内容的对齐。left 把文本排列到左边。默认值:由浏览器决定。right 把文本排列到右边。center 把文本排列到中间。justify 实现两端对齐文......
  • 字体样式和文本样式
    2.2字体样式 /* font-family:字体 font-weight:字体粗细 font-size:字体大小 color:字体颜色 */  <style>    body{      font-family:楷体;      color:red;   }    .p1{     font-we......
  • 【WPF】Dispatcher 与消息循环
    这一期的话题有点深奥,不过按照老周一向的作风,尽量讲一些人鬼都能懂的知识。咱们先来整个小活开开胃,这个小活其实老周在N年前写过水文的,常阅读老周水文的伙伴可能还记得。通常,咱们按照正常思路构建的应用程序,第一个启动的线程为主线程,而且还是UI线程(当然,WPF默认会创建辅助线......
  • WPF grid column resize via GridSpitter, when you can drag to enlarge or shrink t
    <Windowx:Class="WpfApp137.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft......
  • WPF,图表控件
    开源代码地址:https://github.com/bearhanQ/WPFFramework;QQ群:332035933;<UserControlx:Class="WpfBootstrap.View.ChartsView"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://......