是否无法将Page的字符串表示形式转换为Page类型?

时间:2012-12-20 00:15:42

标签: c# casting windows-8 windows-store-apps

我已经在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"];
                }
            }
        }

1 个答案:

答案 0 :(得分:1)

尝试

rootFrame.Navigate(Type.GetType(roamingSettings.Values["CurrentPageType"].ToString()),
                                roamingSettings.Values["CurrentPageParam"]);