Silverlight 下换肤的实现
幸好 Nikhil Kothari 想了个办法解决了这个问题。在使用方式上,借鉴了 asp.net 的 Theme 机制。只要在 Silverlight 程序的根目录下定义一个 Themes 目录,并按要求往其中放入相关的皮肤文件即可。这里建议的方式是每一个控件一个单独的 xaml, 其中放了一个 UserControl. 之所以用 UserControl 的目的是为了能用 Expression Blend 进行可视化设计,非常直观。
主要实现思想:
1. 继承了一个自定义的 App 子类. 使用者需要将现有的 App.xaml 改成使用该类才行。
(同时这个 App 类还实现了根据 initParameters 在 xaml 中动态指定加载的 UserControl 和 Theme 的功能)
其中设置一个 ThemeName 属性来定义 Theme 名称。
2. 在 App 启动时,根据这个属性名动态去加载相关 xaml 的 xml 文件,并解析之。这些皮肤的 xaml 文件在 VS 里是要把 Build Action 设置成 Content 的。这样可以生成到 xap 包里去,以便于加载。
3. 在读取多个 xaml 文件并解析的过程中对同样的 Style 根据优先级做了相应的覆盖合并。最终形成一个总的 xaml 文件内容。
4. 用 XamlReader 的 Load 方法加载最终的文档。将其中的资源都抽取出来,并塞到 App.Resources 字典里去。
5. 然后正常的控件视觉树开始创建。其中的视觉元素指定了 StaticResource 样式,这时它就能从 App 的资源字典里获取到皮肤样式。
注意:这里自始至终没有动态对控件指定 Style 的机制。因为 Silverlight 目前不支持。
这个解决方案的主要思想就是在视觉树加载之前,动态的修改了 App 中的资源,后续的样式应用机制仍然是 framework 默认的。
该方案的代码地址由 Nikhil Kothari 提供如下:[下载]
原文地址:http://www.nikhilk.net/Silverlight-Themes.aspx
Silverlight 下换肤的实现相关推荐
- 寻求合作开发.net下的换肤工具
就我所知道,.net下换肤控件基本没有,决定发起一个开源项目, 最终的控件效果要超过或达到magicskin的效果 感兴趣的朋友请加入qq群1216839,
- 在WPF中创建可换肤的用户界面
在WPF中创建可换肤的用户界面. 周银辉 译 ...
- Android App节日换肤
Android App节日换肤 Android App节日换肤 1原理 2使用方式 1在XML中给需要换肤的控件添加tag属性 2在Activity中使用 3还有疑问吧 3示例图 比如支付宝,饿了么, ...
- Android换肤原理
qq 网易云音乐的换肤功能很炫酷,这里总结下换肤原理. 换肤分为两种模式,静态换肤 动态换肤.静态换肤就是把不同皮肤的资源打包到apk中,使用时切换, 这种换肤的弊端就不再多说了(种类固定,apk大) ...
- .Net下WinForm换肤控件整理
.Net下WinForm换肤控件整理 ...
- 本节作业之显示不同问候语、显示密码、关闭二维码、循环精灵图背景、显示隐藏文本框内容、密码框格式提示错误、京东关闭广告、新浪下拉菜单、开关灯、换肤、表格隔行变色、表单取消全选、tab栏切换、发布删除留言
本节作业之显示不同问候语.显示密码.关闭二维码.循环精灵图背景.显示隐藏文本框内容.密码框格式提示错误.京东关闭广告.新浪下拉菜单.开关灯.换肤.表格隔行变色.表单取消全选.tab栏切换.发布删除留言 ...
- 是男人就下100层【第五层】——换肤版2048游戏
---------------------------------------------------------------------------------------------------- ...
- Spring Boot一键换肤,so easy!
SpringMVC 源码分析系列最后一篇,和大家聊一聊 Theme. Theme,就是主题,点一下就给网站更换一个主题,相信大家都用过类似功能,这个其实和前面所说的国际化功能很像,代码其实也很像,今天 ...
- 关于如何换肤、子类化的解决方案
对于应用程序的换肤及子类化.下面是我尝试过一些方法,以在CAboutDlg中子类化其中的Button为例: 第一种:直接用现成的类 1.自己写一个类class CButtonXP : public C ...
最新文章
- 计算机操作系统“进程”与“线程”的通俗解析
- WIFI 基本理论-2017
- deLPHI书籍名称
- ABAP Development Tool前后台交互的原理
- matlab算出中心差分方法_方差分析、T检验、卡方分析如何区分?
- 单表置换密码java代码实现_C++实现单置换密码
- [******] java多线程连续打印abc
- android动画帧率_Android流畅度之帧率
- Selenium自动化测试-7.获取元素属性信息
- Deepin-文件目录介绍
- Chrome firefox ie等浏览器空格nbsp;宽度不一样
- 计算机科学与工程学院金巍,附件1湖北省思想政教育先进高校名单-附件1-.doc
- Spring Cloud(十二):Spring Cloud Zuul 限流详解(附源码)(转)
- DNS错误不能上网怎么办?电脑dns错误修复方法?
- 高德地图开发踩坑记录
- C++:剑指Offer精讲1.整数除法
- Excel中时间相减的实例教程
- SQL Server代理(已禁用代理XP) 出现的原因以及解决方法【通俗易懂,简洁明了】
- 原型模式——java实现原型模式的几种写法
- 关于DB2数据库和SQL
热门文章
- american php frameworks
- 杭电acm 2177 取(2堆)石子游戏(威佐夫博弈)
- 吴恩达机器学习--单变量线性回归【学习笔记】
- JAVA中的面向对象与内存解析_2
- Java基础-学习笔记(五)——面向过程和面向对象的区别
- JavaScript String支持的辅助format函数+【分页1】
- Git指令2 - 操作分支
- 主产品清单位于oracle,OPatch failed with error code 73(OracleHomeInventory gets null oracleHomeInfo)...
- 一个简单的if else优化
- Morse理论:拓扑不变性特征匹配原理