我想检查用户所在/正在查看的当前页面是否为特定页面 - MainPage。如果用户在MainPage上,我想确保按下后退按钮不会导航到上一页,而是退出应用程序。无论如何检查用户目前的页面是什么?Windows 10开发:如何检查当前页面是否是特定页面?
或者是否有更好的方法来实现我想实现的目标:确保在MainPage上按下后退按钮不会导航到上一页,而是退出应用程序?
我想检查用户所在/正在查看的当前页面是否为特定页面 - MainPage。如果用户在MainPage上,我想确保按下后退按钮不会导航到上一页,而是退出应用程序。无论如何检查用户目前的页面是什么?Windows 10开发:如何检查当前页面是否是特定页面?
或者是否有更好的方法来实现我想实现的目标:确保在MainPage上按下后退按钮不会导航到上一页,而是退出应用程序?
看一看导航方法中的NavigationEventArgs.SourcePageType
。它会返回当前页面的类型。
注意
直到在返回堆栈后退按钮将导航到该条目(页)条目。如果后台是空的按后退将关闭应用程序。在我的应用程序中,当用户按下主页按钮(导航到主页面)时,除了MainPage外,我总是从后台堆栈中移除所有内容,这确保了MainPage上的后退按钮将始终退出。
编辑,我使用回去炫魅广东(亲本解决方案 代码是这样,在堆栈中的页面的导航事件将不会被调用,因为它们都被删除。如果他们间没有“T删除其导航事件将同时通过返回堆栈,这可能会导致意外的行为,穿越被称为):
private void goHome() {
var bs = Frame.BackStack.Where(b => b.SourcePageType.Name == "MainPage").FirstOrDefault();
if (bs != null)
{
Frame.BackStack.Clear();
Frame.BackStack.Add(bs);
}
this.Frame.GoBack();
}
您可以使用此代码:
在App.xaml.cs将这个在OnLaunched方法结束时,
// 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;
}