Windows phone 7 如何在windows Phone 7中跳过背面导航中的页面

Windows phone 7 如何在windows Phone 7中跳过背面导航中的页面,windows-phone-7,windows-mobile,Windows Phone 7,Windows Mobile,我正在WindowsPhone7上开发一个应用程序。因此,我的登录页面是一个自定义的启动屏幕页面(我没有使用默认的方式显示启动屏幕,即使用png文件,因为我需要在运行时根据用户配置文件在启动屏幕中添加数据)。所以我创建了一个splashscreen页面。经过一段时间的延迟(5秒),我导航到我的主页。使用 PhoneApplicationFrame root = Application.Current.RootVisual as PhoneApplicationFrame; root.Navig

我正在WindowsPhone7上开发一个应用程序。因此,我的登录页面是一个自定义的启动屏幕页面(我没有使用默认的方式显示启动屏幕,即使用png文件,因为我需要在运行时根据用户配置文件在启动屏幕中添加数据)。所以我创建了一个splashscreen页面。经过一段时间的延迟(5秒),我导航到我的主页。使用

PhoneApplicationFrame root = Application.Current.RootVisual as PhoneApplicationFrame;
 root.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
现在,如果用户按下手机的后退按钮,默认情况下会进入启动屏幕,但我希望应用程序退出


我怎样才能做到这一点

我有一个类似的场景,下面是我使用的修复程序

对于我想在返回时跳过的页面,我添加了一个bool成员变量,该变量决定是否加载页面内容或返回上一页。这种方法有效,似乎不会对应用程序产生任何不利影响,但可能有更好的解决方案。欢迎提出更好方法的建议

public partial class LoginPage : PhoneApplicationPage
{
    private bool _navigateBack;

    public LoginPage()
    {
        InitializeComponent();

        _navigateBack = false;
    }

    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
        if (_navigateBack)
        {
            this.NavigationService.GoBack();
        }
        else
        {
            _navigateBack = true;
            base.OnNavigatedTo(e);
        }
    }
}

此解决方案通过在退出应用程序之前隐藏您的启动屏幕来创建更干净的退出。我使用此代码跳过导航回特定页面

步骤1:添加jmason的代码

步骤2:将LayoutRoot的默认值设置为hidden

Visibility="Collapsed"
步骤3:在OnNavigatedTo事件中,如果_navigateBack标志为false,则显示LayoutRoot。在OnNavigatedFrom事件中,重新隐藏LayoutRoot

 protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
        if (_navigateBack)
        {
            this.NavigationService.GoBack();
        }
        else
        {
            LayoutRoot.Visibility = Visibility.Visible;
            _navigateBack = true;
            base.OnNavigatedTo(e);
        }
    }
    protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
    {
        LayoutRoot.Visibility = Visibility.Collapsed;
    }

不幸的是,jmason的解决方案无法在Windows Phone 8上运行,因为不允许您强制退出应用程序,这意味着您不允许编写
this.NavigationService.GoBack()。一个更好的(有效的)解决方案是在完成启动屏幕时清理导航堆栈

在启动屏幕后的页面上(通常为主页面):


非常简单,只需将此添加到启动屏幕后的页面,即您的第一页

private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
    {
        NavigationService.RemoveBackEntry();
    }
在这里,您将删除启动屏幕的返回条目。点击后退,你的应用程序将被杀死,而不是重新启动。 快乐编码

private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
    {
        NavigationService.RemoveBackEntry();
    }