Windows 10开发:如何检查当前页面是否是特定页面?

时间:2016-05-16 09:02:00

标签: c# visual-studio windows-10

我想检查用户所在/查看的当前页面是否是特定页面 - MainPage。如果用户在MainPage上,我想确保按后退按钮不导航到上一页但是退出应用程序。无论如何要检查用户当前的页面是什么?

或者有没有更好的方法来实现我想要实现的目标:确保按下MainPage上的后退按钮不会导航到上一页而是退出应用程序?

2 个答案:

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