windows phone主题切换(换肤)

2023-06-08,,

之前项目做了个主题切换的功能,最后客户没来得及出第二套界面给放弃了,默哀中。。。

为了不让它就这样流产了,就放博客共享吧。

首先说明下原理:这个切换是通过重写资源字典里指定的样式,在运行的过程中加载指定的资源字典,然后刷新界面来实现主题切换。很简单,也没几行代码,应该有更好的方式,因为这个需要手动去刷新界面,感觉切换起来用户体验不是很好,如果有更好的方式,请大神拍砖。。。

正文:

1、先将按默认的主题写好资源字典,然后根据不同的主题要求,在新的资源字典中重写部分style。

2、新的资源字典需要Merged默认的主题的资源字典,在新的资源字典里写如如下代码:

<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="默认主题的路径"/>
</ResourceDictionary.MergedDictionaries>

3、这里就需要开始重新加载资源了,继续贴代码:

Application.Current.Resources.Clear();    //先清除当前的资源
Application.LoadComponent(Application.Current.Resources,new Uri("主题路径", UriKind.Relative));  //加载新的主题

4、最后就是刷新界面,上代码:

NavigationService.Navigate(new Uri(“界面路径” +"?Refresh=" + Guid.NewGuid(), UriKind.Relative));

据说这种刷新方式有点问题,会小概率的出现刷新失败的情况,不过我们测试的过程中并没有出现。

还可以考虑另一种更暴力的刷新方式:增加一个空页面,刷新的时候导航到这个页面,在这个页面的OnNavigatedTo方法内重新导航到之前的页面。。。

windows phone主题切换(换肤)的相关教程结束。

《windows phone主题切换(换肤).doc》

下载本文的Word格式文档,以方便收藏与打印。