none
这是WP8.1应用程序栏的Bug吗? RRS feed

  • 问题

  • 当切换当前页面的主题时,其他控件都会正确变化,但是应用程序栏的样式,第一次不会变化,在此切换才会变化。

    而且如果存储当前设置的主题,关闭App,再次打开并在cs代码中设置当前页面的主题为存储的主题,得到的却是正确的样式。继续切换,还是跟上面一样的,第一次不会变化。

    这是WP8.1应用程序栏的Bug吗?

    下面是关键代码:

    1、主题样式:
            <ResourceDictionary x:Key="Dark">

                <SolidColorBrush x:Key="CustomPhoneAccentBrush" Color="Red"/>

            </ResourceDictionary>
            <ResourceDictionary x:Key="Light">

                <SolidColorBrush x:Key="CustomPhoneAccentBrush" Color="Blue"/>

            </ResourceDictionary>
        </ResourceDictionary.ThemeDictionaries>

    2、设置appbar背景色
    <CommandBar Background="{ThemeResource CustomPhoneAccentBrush}" Foreground="White">

    3、切换主题
    private void Button_Click(object sender, RoutedEventArgs e)
            {
                if (this.RequestedTheme == ElementTheme.Dark)
                    this.RequestedTheme = ElementTheme.Light;
                else
                    this.RequestedTheme = ElementTheme.Dark;
            }

    4、存储主题
    ApplicationSettings.SetLocalObject("RequestedTheme", this.RequestedTheme.ToString());

    5、设置主题为存储的主题
    ElementTheme theme = ElementTheme.Dark;
                string requestedTheme = ApplicationSettings.GetLocalObject("RequestedTheme") as string;

                if (!string.IsNullOrWhiteSpace(requestedTheme))
                {
                    if (requestedTheme.Equals(ElementTheme.Dark.ToString()))
                        theme = ElementTheme.Dark;
                    else if (requestedTheme.Equals(ElementTheme.Light.ToString()))
                        theme = ElementTheme.Light;
                }
    this.RequestedTheme = theme;

    2015年1月22日 10:06

答案

  • 你好,

    >>当切换当前页面的主题时,其他控件都会正确变化,但是应用程序栏的样式,第一次不会变化,在此切换才会变化

    这不是BUG,其实ElementTheme枚举是由三个成员的:Default, Light, Dark, 默认情况下的Default:

    所以你的代码中的if语句判断是否为Dark,RequestedTheme还是第一次被设置为Dark,所以看起来没变化,改成如下代码即可:

    private void Button_Click(object sender, RoutedEventArgs e)
    {
                if (this.RequestedTheme == ElementTheme.Dark || this.RequestedTheme == ElementTheme.Default)
                    this.RequestedTheme = ElementTheme.Light;
                else
                    this.RequestedTheme = ElementTheme.Dark;
    }


    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.

    2015年1月23日 6:09
    版主
  • 而且我刚才试了一下,同样的代码,放到win8.1里面 是没问题的。第一次点就应用程序栏就跟着变化。

    你好,

    我共享了我的项目,你可以尝试下:http://1drv.ms/1K9TbA5


    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.

    2015年1月29日 11:16
    版主
  • 你好,按照你的style写法是可以的。

    <ResourceDictionary x:Key="Dark">

                <Color x:Key="CustomPhoneAccentColor">#FF92c622</Color>

            </ResourceDictionary>
            <ResourceDictionary x:Key="Light">

                <Color x:Key="CustomPhoneAccentColor">#FFFFFF00</Color>

            </ResourceDictionary>

    <SolidColorBrush x:Key="CustomPhoneAccentBrush" Color="{ThemeResource CustomPhoneAccentColor}"/>

    但是这种 写法是有什么问题么,这种写法绑定一般的控件是可以的,但是绑定到appbar就不行。

    <Button Content="切换主题"  Background="{ThemeResource CustomPhoneAccentBrush}" Click="Button_Click"/>

    <CommandBar Background="{ThemeResource CustomPhoneAccentBrush}" Foreground="White">


    你好,

    确实按照你的这种写法,CommandBar 的主题始终适合控件相反的,可能是个已知问题,请暂时先用一开始我sample中的写法去实现。


    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.

    • 已标记为答案 十八子 2015年2月4日 9:07
    2015年2月3日 8:22
    版主

全部回复

  • 你好,

    >>当切换当前页面的主题时,其他控件都会正确变化,但是应用程序栏的样式,第一次不会变化,在此切换才会变化

    这不是BUG,其实ElementTheme枚举是由三个成员的:Default, Light, Dark, 默认情况下的Default:

    所以你的代码中的if语句判断是否为Dark,RequestedTheme还是第一次被设置为Dark,所以看起来没变化,改成如下代码即可:

    private void Button_Click(object sender, RoutedEventArgs e)
    {
                if (this.RequestedTheme == ElementTheme.Dark || this.RequestedTheme == ElementTheme.Default)
                    this.RequestedTheme = ElementTheme.Light;
                else
                    this.RequestedTheme = ElementTheme.Dark;
    }


    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.

    2015年1月23日 6:09
    版主
  • 你好,首先感谢回复。

    我加上了你的代码,还是不行。

    问题的现象是,第一次切换主题的时候,页面上的其他元素都会变化,只有应用程序栏不变。再次切换才会变化,而且主题样式跟当前设置的是相反的。

    你可以把应用程序栏加上看下效果。

    2015年1月28日 2:52
  • 而且我刚才试了一下,同样的代码,放到win8.1里面 是没问题的。第一次点就应用程序栏就跟着变化。
    2015年1月28日 7:47
  • 而且我刚才试了一下,同样的代码,放到win8.1里面 是没问题的。第一次点就应用程序栏就跟着变化。

    你好,

    我共享了我的项目,你可以尝试下:http://1drv.ms/1K9TbA5


    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.

    2015年1月29日 11:16
    版主
  • 你好,按照你的style写法是可以的。

    <ResourceDictionary x:Key="Dark">

                <Color x:Key="CustomPhoneAccentColor">#FF92c622</Color>

            </ResourceDictionary>
            <ResourceDictionary x:Key="Light">

                <Color x:Key="CustomPhoneAccentColor">#FFFFFF00</Color>

            </ResourceDictionary>

    <SolidColorBrush x:Key="CustomPhoneAccentBrush" Color="{ThemeResource CustomPhoneAccentColor}"/>

    但是这种 写法是有什么问题么,这种写法绑定一般的控件是可以的,但是绑定到appbar就不行。

    <Button Content="切换主题"  Background="{ThemeResource CustomPhoneAccentBrush}" Click="Button_Click"/>

    <CommandBar Background="{ThemeResource CustomPhoneAccentBrush}" Foreground="White">

    2015年1月31日 2:12
  • 你好,按照你的style写法是可以的。

    <ResourceDictionary x:Key="Dark">

                <Color x:Key="CustomPhoneAccentColor">#FF92c622</Color>

            </ResourceDictionary>
            <ResourceDictionary x:Key="Light">

                <Color x:Key="CustomPhoneAccentColor">#FFFFFF00</Color>

            </ResourceDictionary>

    <SolidColorBrush x:Key="CustomPhoneAccentBrush" Color="{ThemeResource CustomPhoneAccentColor}"/>

    但是这种 写法是有什么问题么,这种写法绑定一般的控件是可以的,但是绑定到appbar就不行。

    <Button Content="切换主题"  Background="{ThemeResource CustomPhoneAccentBrush}" Click="Button_Click"/>

    <CommandBar Background="{ThemeResource CustomPhoneAccentBrush}" Foreground="White">


    你好,

    确实按照你的这种写法,CommandBar 的主题始终适合控件相反的,可能是个已知问题,请暂时先用一开始我sample中的写法去实现。


    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.

    • 已标记为答案 十八子 2015年2月4日 9:07
    2015年2月3日 8:22
    版主
  • 嗯,感谢。这个在win8.1 上是可以的。
    2015年2月4日 9:07