我有一个Windows 10通用Windows平台应用程序,包含多个页面,主页面,列表页面和详细信息页面,并使用以下内容导航到列表页面:
this.Frame.Navigate(typeof(ListPage), parameter);
当您在列表页面上时,您可以选择一个项目,该项目将启动详细信息页面,如下所示:
this.Frame.Navigate(typeof(DetailsPage), parameter);
哪个工作正常,参数是选定的ID或信息,然后使用桌面应用或手机上的后退按钮时使用:
this.Frame.GoBack();
这总是返回到MainPage,即从Main进入,List到Details返回Main,如何让GoBack回到上一页,它似乎总是回家而不是用户期望的行为,一个想法如何解决这个问题?
答案 0 :(得分:2)
在您订阅页面上的HardwareButtons.BackPressed事件(或Win10 UWP应用程序中的等效事件)之前,我已经看到了这一点,但之后不要取消订阅。这意味着在按Back时会调用两个事件处理程序,并且两个事件处理程序都调用Frame.GoBack()。
我总是在页面的NavigatedTo事件中订阅该事件,并在NavigatedFrom事件中取消订阅。
你的应用程序会发生这种情况吗?
如果您应用中的每个页面都应具有相同的行为,即返回上一页,请按照@RoguePlanetoid在评论中的建议订阅应用类中的后退按钮事件:
SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested;
OnLaunched方法将是一个很好的地方。当应用程序在台式机或平板电脑上运行时,不要忘记告诉操作系统显示后退按钮:
SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible;
然后,在app类中添加一个事件处理程序,如下所示:
private void OnBackRequested(object sender, BackRequestedEventArgs e)
{
Frame rootFrame = Window.Current.Content as Frame;
if (rootFrame.CanGoBack)
{
e.Handled = true;
rootFrame.GoBack();
}
}
如果您在按下后退时想要在不同页面上有不同的行为,即要求用户确认丢失他们的更改或其他内容,请在页面OnNavigatedTo方法中订阅后退按钮事件(代码将与上面相同),但请确保您在页面的OnNavigatedFrom事件中取消订阅:
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
SystemNavigationManager.GetForCurrentView().BackRequested -= this.OnBackPressed;
base.OnNavigatedFrom(e);
}