我们知道Windows Phone默认的主题系统是由黑白两色为背景和一些强调色组成的,用户可以随意切换。通常来说,应用开发者无需关心这一部分,系统会去更新相关的资源,然后再体现在应用中。
但有一些时候,我们基于品牌等因素的考量,可能不想使用Windows Phone的默认主题。比如我开发的“豆芽”是豆瓣网的一个客户端,我希望尽可能贴近豆瓣网本身清新的风格,而不是给用户呈现一个和豆瓣网风格大相径庭的黑色背景的界面;再比如我想让应用使用Windows Phone的默认字体(等线),而不是SDK的默认字体(雅黑)。
这些都需要我们去自定义应用的主题。
在介绍如何创建自定义主题之前,先来简单的描述一下Windows Phone主题的原理。
在Windows Phone中,系统预定义了许多资源,这些资源包括了画笔、颜色、字体、粗细、字号、文本样式等等最基本的元素(详细的资源名称可以查看这里)。此外,Windows Phone中的所有控件都会有自己的样式,样式中还包括了定义控件布局的模板,而模板又利用系统内置的资源定义了控件在各种状态下的外观(所以我们在XAML中随处可以见类似{StaticResource PhoneBackgroundBrush}这样的对内置资源的引用)。
所以我们可以想到,修改内置资源或者修改控件的样式都可以达到自定义主题的效果。
在早期的Windows Phone v7.0),我们可以使用前一种方式,只需要在应用中增加一个ResourceDictionary的XAML文件,里边添加若干和系统资源相同键名的资源,即可实现对系统资源的覆盖。
但这种方法在Mango (v7.1)中无效了,它被当作一个Bug修复了,所以我们只能另寻方法。代价最小的一种方法是在App初始化的时候动态的读取我们定义的ResourceDictionary,并替换系统内置资源。具体的步骤可以参考这里 ,我就不赘述了。
此外,还可以利用Mango带来的另外一个变化,新的Silverlight 4带来的“隐式样式”(Implicit Style)。隐式样式是指只有TargetType却没有指定Key的Style,在Silverlight 4中,会将这个Style应用到所有匹配的TargetType对象上。
我们可以利用“隐式样式”来更改内置控件的样式,只需要将需要修改的控件的样式添加到应用的ResourceDictionary中,将其Key值去掉即可(当然不去掉也可以,这就需要手工设置所有匹配控件的Style属性)。
但一般情况下,既然我们想要更改应用级别的主题,基本上我们会修改整套配色方案,如果单纯用“隐式样式”来实现的话,我们就需要实现所有控件的隐式样式,看起来似乎也不是一件简单的事情。
补充:移动开发 , Windows Phone ,- 更多wap疑问解答:
- 新人求助QPainter
- 为什么程序都退出了还可以收到推送?如果大多设备都可以推送那运营商怎么办?
- qt 4.7 sqlserver2000 存储过程调用
- 关于ANDROID4.0.1编译问题!
- Android FrameBuffer读屏幕30秒后mmap失败
- 联通粗定位用java程序如何来请求和接受数据
- 为什么QT运行Android平台的程序时,mouseMoveEvent事件响应的间隔时间很长??????????
- android与PC蓝牙通讯
- 指定大小的label 内容可变,如果内容超出label的宽度,将未能显示的部分显示在另一个label上
- Android调试
- android如何通过wifi连接无线打印机
- 运行程序,release目录下产生一个乱码文件夹
- 分享个某机构最新安卓资料,自己验证了
- service启动不起来,掉不了service connection
- 求助:QT5.0 没有QPrinter吗