如何在WP7中检测主题更改?

6
我的应用程序完全支持主题。当我的应用程序被停用并且用户从暗色主题更改为亮色主题(例如),然后返回到我的应用程序时,主题不会刷新。即使手机主题是亮色的,我的应用程序仍然保持暗色主题。
我尝试了一些方法,但它们报告相同的值。我声明了一个名为isDarkThemeSelected的变量,在停用事件中保存了该值,更改了主题,并重新进入我的应用程序。但是当激活事件被触发时,变量值仍然保持不变。
您有任何解决方案吗?

2
当您从应用程序导航时,是否备份数据?如果是的话,它是否备份了主题?这可能会导致类似的问题。 - Keeano
1个回答

6
将以下代码添加到您的主页面构造函数中:
var v = (Visibility)Resources["PhoneLightThemeVisibility"];
Debug.WriteLine("Using " + (v == Visibility.Visible ? "light" : "dark") + " theme");

它会检测当前主题并在输出窗口中写出该主题。然后启动应用程序,查看 Visual Studio 中的输出,关闭应用程序,更改主题,再次启动应用程序并查看。如果第一次和第二次显示不同,则您的应用程序并非像您想的那样具有主题感知能力。
编辑:由于 Mango bug,这似乎并不总是有效。当您更改主题后 返回 到应用程序时,主题保持不变。只有当用户从应用程序列表中 重新启动 应用程序时,才会应用新主题。

1
谢谢您的回复,我已经尝试了相同的代码,它可以正确地显示主题。但是当我的应用程序被停用并且用户更改主题并重新激活我的应用程序时,它会提供错误的主题信息。 - Santhu
那么你正在错误的地方运行这段代码。你应该注意到主题不会立即改变,而是在上一次启动时重新激活主题,然后在至少渲染一次UI后才会更改为新主题。无论如何,除非你设计的应用程序非常糟糕,否则不需要检查主题。 - Claus Jørgensen
@Jorgensen,我在Mango设备中观察到一个错误,即资源变量的值不会改变。但同样的解决方案在Wp7.0中有效。因此,我想检查这是否真的是一个错误还是我的代码有问题。 - Santhu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接