locked
WP8.1 RT中,实现【夜间模式】【日间模式】的最佳做法是什么? RRS feed

  • 问题

  • 我在WP8.1 RT中,开发了个阅读应用,强制使用了浅色主题【this.RequestedTheme = ApplicationTheme.Dark;】,

    由于是阅读类应用,不可避免要加入【夜间/日间模式】,也就是更改配色方案,而不是随系统的【深主题/浅主题】变化,

    由于【StaticResource】的资源也不能在运行时更改,我的做法是:加载页面的时候根据用户选择的【夜间/日间模式】,更改页面所有控件的颜色(包括listview模板中的颜色),这样代码挺零碎的,

    那么最佳的做法应该是。。。。。。。???

    2014年11月29日 3:36

答案

  • 你好,

    因为目前在Windows Phone/Store App中还没有可用的API去调节屏幕亮度,所以只有通过修改控件的背景和前景色去实现夜间模式,之前Jamles Hez做了一个简单的商店应用示例:https://social.msdn.microsoft.com/Forums/zh-CN/a0fb03aa-a3f7-4433-b660-b818fa57087a/vs2012win8?forum=winstoreappzhcn

    public void lightBackground()
    {
          ContentRoot.Background = new SolidColorBrush(Windows.UI.Colors.White);
    }
    
    public void darkBackground()
    {
          ContentRoot.Background = new SolidColorBrush(Windows.UI.Colors.Gray);
    }

    >>由于【StaticResource】的资源也不能在运行时更改,我的做法是:加载页面的时候根据用户选择的【夜间/日间模式】,更改页面所有控件的颜色(包括listview模板中的颜色),这样代码挺零碎的

    可以把夜间模式和日间模式的代码放在一个助手类中,这样也方便管理,不会很零乱。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年12月1日 3:14
    版主
  • hi jesse51076008

    虽然运行时我们【StaticResource】的资源,但我们可以更改【StaticResource】的资源的值,这个变化是实时的。

    在应用启动的时候我们可以通过ResourceDictionary加载指定的主题资源,当我们再去改主题的时候,再去加载指定主题配置文件【StaticResource】的资源key的值。这样就能达到更换主题实时改变的目的。

    我的项目中已经通过这种方式实现了,代码不零碎,一个类即可实现。

    希望能够帮到你

    2014年12月5日 3:04

全部回复

  • 你好,

    因为目前在Windows Phone/Store App中还没有可用的API去调节屏幕亮度,所以只有通过修改控件的背景和前景色去实现夜间模式,之前Jamles Hez做了一个简单的商店应用示例:https://social.msdn.microsoft.com/Forums/zh-CN/a0fb03aa-a3f7-4433-b660-b818fa57087a/vs2012win8?forum=winstoreappzhcn

    public void lightBackground()
    {
          ContentRoot.Background = new SolidColorBrush(Windows.UI.Colors.White);
    }
    
    public void darkBackground()
    {
          ContentRoot.Background = new SolidColorBrush(Windows.UI.Colors.Gray);
    }

    >>由于【StaticResource】的资源也不能在运行时更改,我的做法是:加载页面的时候根据用户选择的【夜间/日间模式】,更改页面所有控件的颜色(包括listview模板中的颜色),这样代码挺零碎的

    可以把夜间模式和日间模式的代码放在一个助手类中,这样也方便管理,不会很零乱。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年12月1日 3:14
    版主
  • hi jesse51076008

    虽然运行时我们【StaticResource】的资源,但我们可以更改【StaticResource】的资源的值,这个变化是实时的。

    在应用启动的时候我们可以通过ResourceDictionary加载指定的主题资源,当我们再去改主题的时候,再去加载指定主题配置文件【StaticResource】的资源key的值。这样就能达到更换主题实时改变的目的。

    我的项目中已经通过这种方式实现了,代码不零碎,一个类即可实现。

    希望能够帮到你

    2014年12月5日 3:04
  • 你好,请问有demo么。

    525828027@qq.com 有的话方便给一份研究研究嘛。

    感谢。

    2014年12月19日 9:23
  • 你好,请问具体是怎么实现的呢。最近一直在研究动态切换主题资源。

    可以指导一下吗?

    2015年1月13日 8:20