我已经在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 Message =无法将“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"];
}
}
}
答案 0 :(得分:1)
尝试
rootFrame.Navigate(Type.GetType(roamingSettings.Values["CurrentPageType"].ToString()),
roamingSettings.Values["CurrentPageParam"]);