Windows runtime 单击“硬件后退”按钮时,如何导航到主屏幕(或上一个应用程序的页面)?

Windows runtime 单击“硬件后退”按钮时,如何导航到主屏幕(或上一个应用程序的页面)?,windows-runtime,winrt-xaml,windows-phone-8.1,Windows Runtime,Winrt Xaml,Windows Phone 8.1,我正在实现我的应用程序支持的密码锁定功能 我的申请已经执行了 用户将一些页面导航到多个页面 用户单击“主页”按钮,因此我的应用程序已暂停 用户希望再次打开我的应用程序,因此我的应用程序将继续 现在,我的应用程序(在恢复处理程序中)向用户显示密码锁定页面 若用户输入了正确的密码,那个么用户可以继续使用后台页面浏览应用程序。一切都很完美 但在5的情况下,如果用户单击硬件后退按钮会怎么样? 在这种情况下,我的应用程序关闭我的密码锁页面,并在backbackback中显示(我的应用程序的)其他页面。显然

我正在实现我的应用程序支持的
密码锁定功能

  • 我的申请已经执行了
  • 用户将一些页面导航到多个页面
  • 用户单击“主页”按钮,因此我的应用程序已暂停
  • 用户希望再次打开我的应用程序,因此我的应用程序将继续
  • 现在,我的应用程序(在恢复处理程序中)向用户显示密码锁定页面
  • 若用户输入了正确的密码,那个么用户可以继续使用后台页面浏览应用程序。一切都很完美
  • 但在
    5
    的情况下,如果用户单击硬件后退按钮会怎么样?
    在这种情况下,我的应用程序关闭
    我的密码锁页面
    ,并在backbackback中显示(我的应用程序的)其他页面。显然是错误的行为。
    在这种情况下,我想导航到用户以前访问过的其他应用程序页面。它可以是主屏幕或facebook
  • 如何处理这种情况?

    通常,您可以通过实现
    BackPressed
    事件来“覆盖”硬件后退按钮的行为

    private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
    {
        // ...add custom navigation code here
    }
    
    有关详细信息,请参见。给你:

    // when suspending
    var frame = Window.Current.Content as Frame;
    var state = frame.GetNavigationState();
    ApplicationData.Current.LocalSettings.Values["state"] = state;
    
    // when resuming
    var frame = (Window.Current.Content = new Frame()) as Frame;
    frame.Navigate(typeof(Login));
    
    // after login success
    var frame = Window.Current.Content as Frame;
    if (ApplicationData.Current.LocalSettings.Values.ContainsKey("state"))
    {
        var state = ApplicationData.Current.LocalSettings.Values["state"] = state;
        frame.SetNavigationState(state);
    }
    else
    {
        // no state to load
        frame.Navigate(typeof(MainPage));
    }
    
    祝你好运

    在这种情况下,您可以“覆盖”硬件后退按钮的行为
    BackPressed
    事件,以满足您的需要

    这个代码只在Windows Phone中有效,因为Windows 8系统中没有“硬件后退”按钮(因为您添加了Windows runtime标记)

    此代码将取消back按钮的作业,并且应用程序不会在堆栈中加载页面,因此它将保留在密码页面中。您可以根据需要更改行为,如下所示:

    private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
    {
        if( has_entered_password )
            this.Frame.Navigate(typeof(__PageYouWant__));
        else
            e.Cancel = true;
    }
    

    检查并在导航之前执行一些操作,可能清除backbackback,导航到主页,这取决于您的需要。在WP8.1运行时,您不需要覆盖back按钮,您可以做的是订阅事件。根据OP的代码,他必须检查一些EventHandler。
    private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
    {
        if( has_entered_password )
            this.Frame.Navigate(typeof(__PageYouWant__));
        else
            e.Cancel = true;
    }