Windows Phone 资源管理与换肤思考

简介: 原文 Windows Phone 资源管理与换肤思考 新入手一台Windows 8的笔记本,安装了VS2013后,终于又可以开发WP了。公司暂时不愿意开发WP,那么咱就自行研究吧!   在没有WP开发环境的时候,曾经在WPF尝试了一下换肤功能的实现。

原文 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附加属性的修改,保证主题更改时实时更新皮肤。

目录
相关文章
|
4月前
|
Windows
Windows——如何在文件资源管理器地址栏快速打开Vscode
Windows——如何在文件资源管理器地址栏快速打开Vscode
98 4
|
4月前
|
Windows
Windows 资源管理器 CPU100%
Windows 资源管理器 CPU100%
55 0
windows资源管理器中看不到磁盘分区
windows资源管理器中看不到磁盘分区
windows资源管理器中看不到磁盘分区
|
Windows
Windows 右键 图标-菜单无法打开-资源管理器重启-explorer.exe停止与 Windows 交互并关闭【已解决】
Windows 右键 图标-菜单无法打开-资源管理器重启-explorer.exe停止与 Windows 交互并关闭【已解决】
534 0
Windows 右键 图标-菜单无法打开-资源管理器重启-explorer.exe停止与 Windows 交互并关闭【已解决】
|
Go Windows
微软悄悄在 Windows 11 资源管理器中测试广告:用户发文“拒绝”三连
微软悄悄在 Windows 11 资源管理器中测试广告:用户发文“拒绝”三连
131 0
微软悄悄在 Windows 11 资源管理器中测试广告:用户发文“拒绝”三连
|
Windows
如何重启Windows资源管理器
有时候我们对电脑上的一些设置进行了修改后,比如对电脑的注册表进行了修改,这时候可能需要电脑重启,但是比较麻烦,我们有时候重启Windows资源管理器就好了,资源管理器explorer.exe主要用于管理电脑的各种图形界面。比如桌面或者文件管理,或者有时候我们电脑反应速度太慢的时候,出现了假死的时候,我们也可以考虑重启Windows资源管理器,介绍下重启Windows资源管理器方法,大家参考即可。
318 0
如何重启Windows资源管理器
|
Windows
Windows系统 explorer命令详解,Windows命令行打开文件资源管理器
第一步、打开cmd 按下 win 键,输入 cmd 后回车,打开「命令提示符」
1098 0
Windows系统 explorer命令详解,Windows命令行打开文件资源管理器
|
Android开发 iOS开发 Windows
Windows Phone 寿终正寝了,这些经典机型你还记得吗?
不久前,随着最后一家WP手机厂商惠普宣布取消今后Windows Phone的研发计划,以及微软官方声明对WP8.1系统今后所有升级维护的终止,WP手机,作为曾经和安卓手机、苹果手机并驾齐驱的三大智能手机之一,正式寿终正寝。
1534 0
Windows Phone 寿终正寝了,这些经典机型你还记得吗?
|
Windows
Windows 技术篇-桌面图标全部消失问题解决方法,windows资源管理器重启实例演示
Windows 技术篇-桌面图标全部消失问题解决方法,windows资源管理器重启实例演示
434 0
Windows 技术篇-桌面图标全部消失问题解决方法,windows资源管理器重启实例演示
|
Windows
Windows 技术篇-资源管理器文件默认排序设置,通用文件夹排序设置
Windows 技术篇-资源管理器文件默认排序设置,通用文件夹排序设置
434 0
Windows 技术篇-资源管理器文件默认排序设置,通用文件夹排序设置