0

我的 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"];
                }
            }
        }
4

1 回答 1

1

尝试

rootFrame.Navigate(Type.GetType(roamingSettings.Values["CurrentPageType"].ToString()),
                                roamingSettings.Values["CurrentPageParam"]);
于 2012-12-20T05:06:27.767 回答