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 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. . . .)

...しかし、私はそれよりももう少し「エレガント」になろうとしています...ステップスルーできることはわかっていますが、(レジストリのどこかにあると思います)見ることができる場所があるかどうか疑問に思います。これらのローミング設定用に保存された値は表示可能です)。

アップデート

これを見て、引数を取らないページを考慮した後、コードを次のように変更しました。

        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 に答える