我的 App.xaml.cs “永远”的 OnLaunched() 事件中有此代码:
if (args.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
if ((roamingSettings.Values.ContainsKey("CurrentPageType")) &&
(roamingSettings.Values.ContainsKey("CurrentPageParam")))
{
rootFrame.Navigate((Type)roamingSettings.Values["CurrentPageType"],
roamingSettings.Values["CurrentPageParam"]);
}
}
...但我猜它实际上是第一次运行(执行状态已终止),因为我得到了这个错误消息:
System.InvalidCastException 未被用户代码处理 HResult=-2147467262 消息=无法将“System.String”类型的对象转换为“System.Type”类型。
我在每个页面的 OnNavigatedTo() 事件中将当前页面分配给此漫游设置:
App.roamingSettings.Values["CurrentPageType"] = GetType().ToString();
是我的语法有问题,还是我的方法有问题?
我想我可以这样分配它:
App.roamingSettings.Values["CurrentPageType"] = "DetailPage";
...然后在我的 OnLaunched() 事件中使用它:
if (roamingSettings.Values["CurrentPageType"] == "DetailPage")
{
Frame.Navigate(typeof(DetailPage), App.activeSection);
}
else if (. . . etc. . . .)
...但我正试图变得更“优雅”...为这些漫游设置保存的值是可见的)。
更新
在看了这个之后,考虑到那些不带 arg 的页面,我将代码更改为:
if (args.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
if (roamingSettings.Values.ContainsKey("CurrentPageType"))
{
if (roamingSettings.Values.ContainsKey("CurrentPageParam"))
{
rootFrame.Navigate((Type)roamingSettings.Values["CurrentPageType"],
roamingSettings.Values["CurrentPageParam"]);
}
else
{
rootFrame.Navigate((Type) roamingSettings.Values["CurrentPageType"];
}
}
}