0

在我的 Windows 应用商店应用程序中,我遵循 Microsoft 指南在应用程序终止后恢复应用程序(http://goo.gl/oZ7BG)。一切正常,但是在应用程序终止后,我想跳转登录页面(即应用程序的第一页)并直接转到应用程序的菜单页面。这绝对像 Dropbox 应用程序。我知道我必须使用 App.xaml.cs 和这个方法:

protected async override void OnLaunched(LaunchActivatedEventArgs args)
    {
        Frame rootFrame = Window.Current.Content as Frame;

        // Do not repeat app initialization when the Window already has content,
        // just ensure that the window is active
        bool appTerminated = false;
        if (rootFrame == null)
        {
            // Create a Frame to act as the navigation context and navigate to the first page
            rootFrame = new Frame();
            marketingHP.Common.SuspensionManager.RegisterFrame(rootFrame, "appFrame");

            if (args.PreviousExecutionState == ApplicationExecutionState.Terminated)
            {
                //TODO: Load state from previously suspended application
                await marketingHP.Common.SuspensionManager.RestoreAsync();
                appTerminated = true;
            }

            // Place the frame in the current Window
            Window.Current.Content = rootFrame;
        }

        if (rootFrame.Content == null)
        {
            // When the navigation stack isn't restored navigate to the first page,
            // configuring the new page by passing required information as a navigation
            // parameter
            if (appTerminated)
                rootFrame.Navigate(typeof(HomePage), args.Arguments);
            else if (!rootFrame.Navigate(typeof(LoginPage), args.Arguments))
            {
                throw new Exception("Failed to create initial page");
            }
        }
        // Ensure the current window is active
        Window.Current.Activate();
    }

我怎么知道该应用程序之前已终止?请注意,我添加了 bool appTerminated 但它仅适用于挂起......

4

1 回答 1

1

在此处进一步阅读 Windows 8 应用程序生命周期:http: //msdn.microsoft.com/en-us/library/windows/apps/hh464925.aspx

特别要注意有关 PreviousExecutionState 属性的部分,其中包含的表格概述了不同的终止状态。看起来您想要做的是检查 PreviousExecutionState 的值,如果该值反映了您想要跳过登录页面的条件(例如用户已经登录),那么您应该导航到您的主页,类似于您在上面尝试做的事情。

如果您要手动关闭应用程序并且 Windows 由于资源限制而没有终止它,或者它被意外关闭,则appTerminated不会设置为true.

代替:

if (args.PreviousExecutionState == ApplicationExecutionState.Terminated)

包括检查应用程序是否被用户终止:

if (args.PreviousExecutionState == ApplicationExecutionState.Terminated ||
    args.PreviousExecutionState == ApplicationExecutionState.ClosedByUser)

这将在 Windows 由于资源限制而终止应用程序时以及用户手动终止应用程序时捕获。然后,在从终止启动时,appTerminated应设置为 true,并且应用程序应直接导航到HomePage.

编辑:

在回答您的评论时,您可以在 App.xaml 文件中提供更改 Navigate 调用中传递的参数的逻辑。你可以这样做:

string navArgs = "FromApp";
if (appTerminated)
{
    navArgs = "FromTerminated";
}

然后,只需在调用 Navigate 时将其传递给 HomePage:

if (appTerminated)
{
    rootFrame.Navigate(typeof(HomePage), navArgs);
}

现在,在您的 HomePage 代码隐藏文件中,定义 OnNavigatedTo 方法。这需要一个 NavigatedEventArgs ,然后您可以将其转换为某个对象(在本例中为 a String),然后检查传递的内容:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    string navArgs = e.Parameter as String;
    switch (navArgs)
    {
    case "FromApp":
        //Do something here
        break;
    case "FromTerminated":
        //Do something different here
        break;
    default:
        break;
    }
}

希望这可以帮助!

于 2013-11-06T23:45:33.293 回答