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