【问题标题】:How to navigate to home screen(or previous application's page) when hardware back button clicked?单击硬件后退按钮时如何导航到主屏幕(或上一个应用程序的页面)?
【发布时间】:2014-08-06 14:53:45
【问题描述】:

我正在实现我的应用程序支持的password lock feature

  1. 我的申请已被执行。
  2. 并且用户在一些页面之间导航。
  3. 用户单击主页按钮,因此我的应用已暂停。
  4. 用户想再次打开我的应用,所以我的应用恢复了。
  5. 现在我的应用程序向用户显示(在恢复处理程序中)密码锁定页面。
  6. 如果用户输入了正确的密码,用户可以继续浏览带有反堆叠页面的应用程序。一切都很完美。
  7. 但是在5 的情况下,如果用户单击硬件返回按钮怎么办?
    在这种情况下,我的应用程序关闭my passwordlock page 并在后台显示(我的应用程序的)其他页面。显然是错误的行为。
    在这种情况下,我想导航到用户之前访问过的其他应用程序页面。它可以是主屏幕或 Facebook。

我该如何处理这种情况?

【问题讨论】:

标签: windows-runtime winrt-xaml windows-phone-8.1


【解决方案1】:

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

private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
{
    // ...add custom navigation code here
}

详情请见Handling the Back Button in a Windows Phone app (XAML)

【讨论】:

  • 在 WP8.1 运行时你不会覆盖后退按钮,你可以做的是订阅一个事件。根据 OP 的代码,他将不得不检查一些事件处理程序。
【解决方案2】:

当然。给你:

// 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));
}

祝你好运!

【讨论】:

    【解决方案3】:

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

    这个代码只能在 Windows Phone 中工作,因为在 Windows 8 系统中没有硬件返回按钮(因为你添加了 Windows-runtime 标签)。

    private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
    {
        e.Cancel = true;
    }
    

    此代码将取消返回按钮的工作,应用程序不会在堆栈中加载页面,因此它将停留在密码页面中。你可以像这样改变你想要的行为:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-27
      • 2020-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多