我想检查用户所在/查看的当前页面是否是特定页面 - MainPage。如果用户在MainPage上,我想确保按后退按钮不导航到上一页但是退出应用程序。无论如何要检查用户当前的页面是什么?
或者有没有更好的方法来实现我想要实现的目标:确保按下MainPage上的后退按钮不会导航到上一页而是退出应用程序?
答案 0 :(得分:0)
在导航方法中查看obj
。它将返回当前页面的类型。
注意强>
在Backstack中有条目后,后退按钮将导航到该条目(页面)。如果背板是空的,按后退按钮将关闭应用程序。在我的应用程序中,当用户按下主页按钮(导航到主页)时,我总是从Backstack中删除除MainPage之外的所有内容,这确保了MainPage上的后退按钮将始终退出。
修改强> 我用来返回MainPage的代码(这个解决方案的专业人员就是这样,不会调用backstack中页面的导航事件,因为它们被删除。如果没有删除它们的导航事件将是在遍历后台时调用,这可能会导致意外行为。):
NavigationEventArgs.SourcePageType
答案 1 :(得分:0)
您可以使用此代码:
在OnLaunched方法结束时将其放在App.xaml.cs中,
// Register a handler for BackRequested events and set the
// visibility of the Back button
SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested;
SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility =
rootFrame.CanGoBack ?
AppViewBackButtonVisibility.Visible :
AppViewBackButtonVisibility.Collapsed;
写下这个方法,
private void OnBackRequested(object sender, BackRequestedEventArgs e)
{
Frame rootFrame = Window.Current.Content as Frame;
if (rootFrame.CanGoBack)
{
e.Handled = true;
rootFrame.GoBack();
}
//you can check for this here rootFrame.BackStack[rootFrame.BackStack.Count-1].SourcePageType.Name
}
此外,您还可以检查页面并控制桌面应用程序中后退按钮的可见性,
private void OnNavigated(object sender, NavigationEventArgs e)
{
// Each time a navigation event occurs, update the Back button's visibility
Frame rootFrame = (Frame)sender;
if (rootFrame.BackStack != null && rootFrame.BackStack.Count == 1)
{
// take care in page names
if (rootFrame.BackStack[0].SourcePageType.Name == "MainPage"
|| rootFrame.BackStack[0].SourcePageType.Name == "AnyOtherPage")
{
rootFrame.BackStack.RemoveAt(0);
}
}
SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility =
((Frame)sender).CanGoBack ?
AppViewBackButtonVisibility.Visible :
AppViewBackButtonVisibility.Collapsed;
}