locked
MergedDictionaries切换样式文件没有效果? RRS feed

  • 问题

  • 以下是我的代码:

    Windows::UI::Xaml::ResourceDictionary^ dictionary = Application::Current->Resources;
     int count = dictionary->MergedDictionaries->Size;
     if (count > 0)
     {
      dictionary->MergedDictionaries->Clear();
     }
    if (this->RequestedTheme == ApplicationTheme::Dark)
    {
    ResourceDictionary^ dicDark = ref new ResourceDictionary();
    Uri^ uri = ref new Uri("ms-appx:///Themes/Generic.xaml");
    dicDark->Source = uri;
    dictionary->MergedDictionaries->Append(dicDark);
    }
    else
    {
    ResourceDictionary^ dicLight = ref new ResourceDictionary();
    Uri^ uri = ref new Uri("ms-appx:///WhiteThemeStyle.xaml");
    dicLight->Source = uri;
    dictionary->MergedDictionaries->Append(dicLight);
    }
    第一次启动是黑色主题,这时成功绑定了Generic.xaml样式,第二步切换系统主题为白色,代码走了else分支,但样式并没有改变,这是什么原因呢?谢谢~~


    2015年2月9日 3:57

答案

  • 你好,

    深色主题与白色主题是系统默认的,你可以在(c:\Program File(x86)\Microsoft SDKs\Windowns Phone\v8.1\Design)下看见。

    所以这里通过if (this->RequestedTheme == ApplicationTheme::Dark) 的判断来添加自己的浅色主题主题的方法是有问题的。

    大致思路如下:

     
    _userSettings =  ref new  UserSettings(); 
     if (_userSettings->SelectedTheme == ElementTheme::Dark) 
            _userSettings->SelectedTheme = ElementTheme::Light; 
     else 
           _userSettings->SelectedTheme = ElementTheme::Dark; 

    如果你与希望可以切换Dark/Light主题,或是自定义主题的功能详见:

    案列参考:https://code.msdn.microsoft.com/windowsapps/XAML-requested-theme-sample-e6d46def

    此示例演示如何设置您的应用程序,请求的 UI主题(暗或较亮) 以及如何设置UI主题以不同的方式为应用程序内的各个元素。


    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月10日 12:35
    版主