单击硬件后退按钮时如何导航到主屏幕(或以前的应用程序页面)?

时间:2014-08-05 08:31:50

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

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

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

3 个答案:

答案 0 :(得分:0)

一般来说,你可以"覆盖"通过实施BackPressed事件,硬件后退按钮的行为。

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

有关详细信息,请参阅Handling the Back Button in a Windows Phone app (XAML)

答案 1 :(得分:0)

不确定。你走了:

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

祝你好运!

答案 2 :(得分:0)

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

这段代码只适用于Windows Phone,因为Windows 8系统中没有硬件后退按钮(因为您添加了Windows运行时标记)。

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