WPF动态改变主题颜色

国内的WPF技术先行者周银辉曾介绍过如何动态改变应用程序的主题样式,今天我们来介绍一种轻量级的改变界面风格的方式——动态改变主题色。
程序允许用户根据自己的喜好来对界面进行配色,这种技术在很多软件中都有应用,比如这款名为AirPlay的音乐播放器软件:


 附件: 您所在的用户组无法下载或查看附件


下面我们就来自己动手实现这种技术:
首先在App.xaml文件中定义一个键值为“color”的单色笔刷,这个笔刷就是可以被用户改变的动态资源:

Code


然后来设计这样一个界面:


 附件: 您所在的用户组无法下载或查看附件


我们让用户通过4个滑块来分别定制颜色的A、R、G、B值,其完整代码为:

Code


需注意,要把滑块的最大值设为255。

然后回到App.xaml中,我们来定义窗口、标签及按钮的样式:

窗口样式代码如下:

Code


定义样式为几个Border进行嵌套,在最底层引用的之前定义的单色笔刷,在上层用低不透明度的白色和黑色覆盖以产生不同的层次效果。

标签样式为:

Code


按钮样式为:

Code


其原理与窗口样式相同。

然后回到主界面设计窗口,设置窗体的样式:

Code


接下来编辑后台代码,首先为窗体增加事件处理以提供拖动功能:

Code


后台事件处理代码:

Code


为按钮增加事件处理来更新界面颜色:

Code


“更新颜色”方法代码如下:

Code


此方法首先移除资源“color”,然后再添加一个同名的新笔刷,这样就完成了动态替换工作。

现在编译并执行程序,可以看到如下效果:

 附件: 您所在的用户组无法下载或查看附件
 附件: 您所在的用户组无法下载或查看附件

 附件: 您所在的用户组无法下载或查看附件
 附件: 您所在的用户组无法下载或查看附件


源代码下载


 附件: 您所在的用户组无法下载或查看附件



(文/SkyD  出处/博客园)

 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 您可能对 [WPF] 的这些文章也感兴趣:

在MFC中使用WPF技术
在WPF中减少逻辑与UI元素的耦合
[Prism]Composite Application Guidance for WPF(7)——模块
[Prism]Composite Application Guidance for WPF 系列
【WPF】一个类似于QQ面板的GroupShelf控件
WPF实现无窗体鼠标跟随
WPF实现不规则动画按钮
WPF动态改变主题颜色
构建简单的WPF应用程序
WPF 常见问题解答