如何跳过Windows Phone 7中的后退导航页面

时间:2010-08-19 05:56:43

标签: windows-phone-7 windows-mobile

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

PhoneApplicationFrame root = Application.Current.RootVisual as PhoneApplicationFrame;
 root.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));

现在,如果用户按下手机的后退按钮,默认情况下会转到启动画面,但我希望应用程序退出。

我怎么能做到这一点。

4 个答案:

答案 0 :(得分:4)

我有类似的情况,这是我使用的修复。

对于我想在浏览后跳过的页面,我添加了一个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 :(得分:3)

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

在启动画面后的页面上(通常是主页面):

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    // Calling the base class OnNavigatedTo method
    base.OnNavigatedTo(e);

    // Only clear the stack for 'new' (forward) and 'refresh' navigations
    if (e.NavigationMode == NavigationMode.New || e.NavigationMode == NavigationMode.Refresh)
        // For UI consistency, clear the entire page stack
        while (this.NavigationService.RemoveBackEntry() != null)
            // Do nothing
            ;
}

答案 2 :(得分:0)

此解决方案通过在退出应用之前隐藏启动画面来创建更清晰的退出。我使用此代码跳过导航回特定页面。

第1步:添加jmason的代码

步骤2:将LayoutRoot的默认设置为隐藏

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

答案 3 :(得分:0)

非常简单,只需在启动画面之后将其添加到页面,即第一页

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

在这里,您可以删除启动画面的后退条目。点击后退你的应用程序将被杀死,而不是回到飞溅。 快乐的编码。