Windows Phone 资源管理与换肤思考

Windows Phone 资源管理与换肤思考

原文 Windows Phone 资源管理与换肤思考

新入手一台Windows 8的笔记本,安装了VS2013后,终于又可以开发WP了。公司暂时不愿意开发WP,那么咱就自行研究吧!

 

在没有WP开发环境的时候,曾经在WPF尝试了一下换肤功能的实现。最简单的是在后台修改需要更换样式的控件的Style,然而这样做工作量很大而且可拓展性也很差。总不可能添加一种主题皮肤,就在每个页面写一次Style的加载吧,工作量太大又容易出错。

 

于是在MSDN上仔细阅读了相关文档,发现了DynamicResource拓展关键字。MSDN描述为“为任何 XAML 属性特性提供值,该值将推迟为对已定义的资源的引用。 该资源的查找行为与运行时查找类似。”什么意思呢,就是运行时才加载改资源,并且键值对应的资源修改时会同时更新UI控件的显示。这不是正是我们要找的么!

于是用WPF做了的Demo,Demo里面有两套模板,两套模板都定义了一套相同键值的资源样式(Style)。而页面使用DynamicResource绑定对应资源。切换两套模板,实现皮肤更换。

blackStyle.xaml模板

复制代码
<Style x:Key="bgGrid" TargetType="Grid"><Setter Property="Background"><Setter.Value><ImageBrush ImageSource="/Img/bgBlack.jpg" Stretch="Fill"/></Setter.Value></Setter></Style>
复制代码

WhiteStyle.xaml模板

复制代码
<Style x:Key="bgGrid" TargetType="Grid"><Setter Property="Background"><Setter.Value><ImageBrush ImageSource="/Img/bgLight.jpg" Stretch="Fill"/></Setter.Value></Setter></Style>
复制代码


切换应用加载的资源实现换肤

复制代码
if (Application.Current.Resources.MergedDictionaries[1].Source.OriginalString.Equals("/Common/BlackStyle.xaml")){Application.Current.Resources.MergedDictionaries[1].Clear();Application.Current.Resources.MergedDictionaries[1].Source = new Uri("/Common/WhiteStyle.xaml", UriKind.Relative);}else{Application.Current.Resources.MergedDictionaries[1].Clear();Application.Current.Resources.MergedDictionaries[1].Source = new Uri("/Common/BlackStyle.xaml", UriKind.Relative);}
复制代码

如此,确实能实时更换皮肤。然而当我配置好Windows Phone的开发环境时,却发现这样的方式在WPF行得通,而Windows Phone 上面却行不通。且不说WP上没有实现DynamicResource关键字,在执行Application.Current.Resources.MergedDictionaries[1].Source = new Uri("/Common/BlackStyle.xaml", UriKind.Relative);这一句的时候更是提示了调用了Com组件的错误。好吧,WP的内核是和WPF不同,所以不能这样实现。但是动态资源DynamicResource确实是实现Xaml换肤的最好方式。

 

那么还有什么方法可以实现动态更换皮肤,并且可拓展性和可维护性又好呢?经过一番思考之后,觉得附加属性能够实现这样的功能。附加一个StyleName属性,并且属性根据应用的设置查询出相应的Style加载到控件上。如何实现应用主题切换通知页面重新加载样式这个关键点,还在思索当中,后续有结果会再发表博文。同时希望有好想法的能留个思路。

 

设想:

<Grid cm:StyleAttach.StyleName="bgGrid" cm:StyleAttach.Theme="{Binding Theme}">
</Grid>

通过绑定主题和资源名称来获取资源,同时通过Theme附加属性的修改,保证主题更改时实时更新皮肤。

posted on 2013-12-27 20:56 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/3494769.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473722.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django完成异步工具——celery

情景&#xff1a;用户发起request&#xff0c;并等待response返回。在本些views中&#xff0c;可能需要执行一段耗时的程序&#xff0c;那么用户就会等待很长时间&#xff0c;造成不好的用户体验&#xff0c;比如发送邮件、手机验证码等使用celery后&#xff0c;情况就不一样了…

Python基础(三)--序列

Python基础&#xff08;三&#xff09;--序列 1 序列相关的概念 1.1 什么是序列 序列是一种可迭代对象&#xff0c;可以存储多个数据&#xff0c;并提供数据的访问。 序列中的数据称为元素&#xff0c;Python内置的序列类型有&#xff1a;列表&#xff08;list&#xff09;…

项目上线最后工作——布署环境

当项目开发完成后&#xff0c;需要将项目代码放到服务器上&#xff0c;这个服务器拥有固定的IP&#xff0c;再通过域名绑定&#xff0c;就可以供其它人浏览&#xff0c;对于python web开发&#xff0c;可以使用wsgi、apache服务器&#xff0c;此处以wsgi为例进行布署服务器首先…

Python基础(四)--字典与集合

Python基础&#xff08;四&#xff09;--字典与集合 1 字典 1.1 什么是字典 字典提供的是一种映射存储的方式。字典分为两个部分&#xff0c;一个是键&#xff08;key&#xff09;&#xff0c;一个是key所关联的值&#xff08;value&#xff09;。&#xff0c;一个键关联&am…

[Kaggle] Spam/Ham Email Classification 垃圾邮件分类(spacy)

文章目录1. 导入包2. 数据预览2. 特征组合3. 建模4. 训练5. 预测练习地址&#xff1a;https://www.kaggle.com/c/ds100fa19 相关博文&#xff1a; [Kaggle] Spam/Ham Email Classification 垃圾邮件分类&#xff08;RNN/GRU/LSTM&#xff09; [Kaggle] Spam/Ham Email Classifi…

电商网站(Django框架)—— 大纲内容与基本功能分析

1. 项目架构 2. 数据库表结构 3. 数据库读写分离 4. Django读写分离配置 新建utils/db_router.py 课后阅读资料 http://python.usyiyi.cn/documents/django_182/topics/db/multi-db.html 5. 用户认证模型 注意&#xff1a; AUTH_USER_MODEL配置参数要在第一次迁移数据库之…

Python基础(五)--函数

目录 Python基础&#xff08;五&#xff09;--函数 1 函数的作用 1.1 函数定义与调用 1.2 函数的作用 1.3 空语句 2 参数与返回值 2.1 函数的参数 2.2 函数的返回值 2.3 返回多个值 3 参数的默认值 3.1 可选参数 3.2 参数的默认值 4 位置参数与关键字参数 4.1 关键…

LeetCode 1024. 视频拼接(动态规划/贪心)

文章目录1. 题目2. 解题2.1 动态规划2.2 贪心1. 题目 你将会获得一系列视频片段&#xff0c;这些片段来自于一项持续时长为 T 秒的体育赛事。这些片段可能有所重叠&#xff0c;也可能长度不一。 视频片段 clips[i] 都用区间进行表示&#xff1a;开始于 clips[i][0] 并于 clip…

电商网站(Django框架)—— 思维导图

1.用户模块&#xff1a;注册、登录、激活、退出、个人中心、地址 2.商品模块&#xff1a;首页、详情、列表、搜索 3.购物车&#xff1a; 增加、删除、修改、查询 4. 订单模块&#xff1a;确认订单页面、提交订单&#xff08;下单&#xff09;、请求支付、查询支付结果、评论 5.…

Python基础(六)--类与对象

目录 Python基础&#xff08;六&#xff09;--类与对象 1 类与对象的基本概念 1.1 什么是对象 1.2 什么是类 1.3 类与对象的关系 2 定义与初始化 2.1 类的定义 2.2 对象的初始化 2.3 动态增加属性方法 3 类成员 3.1 类属性与实例属性 3.2 类方法与实例方法 3.3 静态…

HTTP和HTTPS的请求和响应

HTTP协议&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;&#xff1a;是一种发布和接收 HTML页面的方法。 HTTPS&#xff08;Hypertext Transfer Protocol over Secure Socket Layer&#xff09;简单讲是HTTP的安全版&#xff0c;在HTTP下加入…

LeetCode 794. 有效的井字游戏(分类讨论)

文章目录1. 题目2. 解题1. 题目 用字符串数组作为井字游戏的游戏板 board。当且仅当在井字游戏过程中&#xff0c;玩家有可能将字符放置成游戏板所显示的状态时&#xff0c;才返回 true。 该游戏板是一个 3 x 3 数组&#xff0c;由字符 " "&#xff0c;"X&quo…

Requests: 让 HTTP 服务人类

Requests支持HTTP连接保持和连接池&#xff0c;支持使用cookie保持会话&#xff0c;支持文件上传&#xff0c;支持自动确定响应内容的编码&#xff0c;支持国际化的 URL 和 POST 数据自动编码。 Requests的文档非常完备&#xff0c;中文文档也相当不错。Requests能完全满足当前…

Python基础(七)--模块和包

目录 Python基础&#xff08;七&#xff09;--模块和包 1 模块 1.1 什么是模块 1.2 模块的使用 1.3 模块的搜索路径 1.4 模块的缓存 2 包 2.1 什么是包 2.2 包的使用 3 常用模块 3.1 math 3.2 random 3.3 time 3.4 datetime 3.5 sys Python基础&#xff08;七&am…

LeetCode 909. 蛇梯棋(BFS)

文章目录1. 题目2. 解题1. 题目 N x N 的棋盘 board 上&#xff0c;按从 1 到 N*N 的数字给方格编号&#xff0c;编号 从左下角开始&#xff0c;每一行交替方向。 例如&#xff0c;一块 6 x 6 大小的棋盘&#xff0c;编号如下&#xff1a; r 行 c 列的棋盘&#xff0c;按前…

爬虫必须学会的正则表达式

为什么要学正则表达式 实际上爬虫一共就四个主要步骤&#xff1a; 明确目标 (要知道你准备在哪个范围或者网站去搜索)爬 (将所有的网站的内容全部爬下来)取 (去掉对我们没用处的数据)处理数据&#xff08;按照我们想要的方式存储和使用&#xff09; 我们在昨天的案例里实际上…

Python基础(八)--迭代,生成器,装饰器与元类

目录 Python基础&#xff08;八&#xff09;--迭代&#xff0c;生成器&#xff0c;装饰器与元类 1 迭代 1.1 可迭代对象与迭代器 1.2 自定义迭代类型 1.3 迭代合体 2 生成器 2.1 什么是生成器 2.2 生成器表达式 2.3 生成器函数 3 装饰器 3.1 闭包 3.2 什么是装饰器 …

XPath和lxml类库

XPath&#xff0c;我们可以先将 HTML文件 转换成 XML文档&#xff0c;然后用 XPath 查找 HTML 节点或元素。 什么是XML XML 指可扩展标记语言&#xff08;EXtensible Markup Language&#xff09;XML 是一种标记语言&#xff0c;很类似 HTMLXML 的设计宗旨是传输数据&#xf…

Python基础(九)--异常

Python基础&#xff08;九&#xff09;--异常 1 异常相关概念 1.1 什么是异常 异常是程序运行过程中产生的一种事件&#xff0c;该事件会打乱程序的正常流程。可以说&#xff0c;异常就是一种意外&#xff0c;指程序没有按照正常或期望的方式执行。 当异常产生时&#xff0…

爬虫工具:虚拟机Selenium和PhantomJS,ChromeDriver 镜像安装教程

虚拟机Ubuntu 16.04中安装&#xff1a; 1.安装Selenium命令&#xff1a;pip install Selenium 2.安装PhantomJS命令&#xff1a;sudo apt install PhantomJS 3.找到Ubuntu中谷歌所对应的的版本号&#xff1a; 看到网上基本没有最新的chromedriver与chrome的对应关系表&#xff…