C# Windows Phone,如何应对主题更改?
我正在使用主题资源:C# Windows Phone,如何应对主题更改?,c#,wpf,windows-phone-8,themes,windows-phone-8.1,C#,Wpf,Windows Phone 8,Themes,Windows Phone 8.1,我正在使用主题资源: <Page.Resources> <ResourceDictionary> <ResourceDictionary.ThemeDictionaries> <ResourceDictionary x:Key="Dark" Source="../Styles/Main/Dark.xaml" /> <ResourceDictionary x:Key="Li
<Page.Resources>
<ResourceDictionary>
<ResourceDictionary.ThemeDictionaries>
<ResourceDictionary x:Key="Dark" Source="../Styles/Main/Dark.xaml" />
<ResourceDictionary x:Key="Light" Source="../Styles/Main/Light.xaml" />
</ResourceDictionary.ThemeDictionaries>
</ResourceDictionary>
</Page.Resources>
这个解决方案通常是有效的,但只有在启动应用程序之前选择了主题。若用户在应用程序运行时更改主题,则所有主题颜色(可通过StaticResource访问的颜色)都会正确刷新,但应用程序仍使用旧的主题词典(例如,当用户从暗切换到亮时,为暗)
如何中断主题更改并加载有效的主题词典?当用户更改手机主题时,使用ThemeResource定义的资源应自动更新。查看此处的备注部分: 具体而言: “当应用程序首次启动时,主题资源引用所做的任何资源引用都将根据启动时使用的主题进行评估。但如果用户随后在运行时更改活动主题,系统将重新评估每个主题资源引用,检索可能不同的主题特定资源,并在可视树中的所有适当位置重新显示具有新资源值的应用。”
请确保将主题词典中的资源标记为主题资源而非静态资源。主题更改时会重新计算主题资源,而静态资源不会。是否确定未更改的属性标记为主题资源而非静态资源。请参阅此处的备注部分:@BretBentzinger MSFT This was在这种情况下,虽然我将ResourceDictionaries声明为主题词典,但实际的资源是由StaticResource提取的。现在一切都正常了。你可以回答这个问题,这样我就可以接受了。不过,任何关于它的活动都很好(如果我需要在应用程序主主题更改后立即做一些事情的话)。