【问题标题】:Can I find out which page a user came from on Back Button press on WP7?我可以在 WP7 上按下后退按钮时找出用户来自哪个页面吗?
【发布时间】:2011-08-10 02:33:46
【问题描述】:

我没有太多运气通过谷歌搜索找到答案,但是有可能知道用户来自哪个页面吗?

或者,在按下后退按钮时发送一个查询字符串,以便我知道?

基本上,我有一个页面,我不希望用户通过按后退按钮进入 - 他们应该到达那里的唯一方法是如果他们从一开始就遵循该过程。我正在尝试做的一个很好的例子是不允许用户在成功注册后注册帐户时返回确认设置。我宁愿他们去注册开始。

【问题讨论】:

    标签: windows-phone-7


    【解决方案1】:

    您可以使用NavigationService.BackStack 属性并在页面导航到时检查返回堆栈中的第一个条目。

    如果需要在多个页面中进行此检查,可以将其放入基类中。此外,如果您的情况符合@Skomski 提到的 eula/login 场景,那么他的回答是最有意义的。

    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);
    
        var lastPage = NavigationService.BackStack.FirstOrDefault();
    
        if (lastPage != null && lastPage.Source.ToString() == "/MainPage.xaml")
        {
            NavigationService.RemoveBackEntry();
        }
    }
    

    【讨论】:

    • 如果用户点击后退按钮,此解决方案将不起作用。
    • @VansFannel:很明显,这段代码sn-p可以和检查是否打开新页面结合起来(NavigationEventArgs.NavigationMode参数等于New)。
    【解决方案2】:

    基本上你想删除你的 NavigationEntrys。

    为此,请使用NavigationService.RemoveBackEntry

    您可以使用这个 sn-p 从任何地方访问 NavigationService:

    (App.Current.RootVisual as PhoneApplicationFrame).RemoveBackEntry()
    

    更好的解决方案:

    关于最终用户许可协议/登录屏幕(和启动画面)- 不要将它们放入页面中。如果您改为将它们设为 Popup 或 Dialog 控件,则您可以随时显示或隐藏它们(在第一次导航时;当用户点击应用程序的“受保护”部分时;超时后等)并且它们不会消耗 backstack 中的一个 slot。

    来源:http://blogs.msdn.com/b/ptorr/archive/2010/08/01/exiting-a-windows-phone-application.aspx

    【讨论】:

    • 我真的不想删除任何后退条目,因为有不止一种方法可以访问他们将按下后退按钮的页面。 (其中一些他们可以返回)
    【解决方案3】:

    一种方法是在每个页面上覆盖OnBackKeyPress(主页除外,因为那将毫无意义)。在该函数中,将当前页面的名称分配给全局变量。现在,您导航回的页面可以检查全局变量并确定您是如何到达那里的。

    【讨论】:

      【解决方案4】:

      我想不出直接检测后退按钮按下的方法。

      记录流程中当前阶段的会话变量怎么样?

      【讨论】:

        【解决方案5】:

        您可以使用 NavigationService 来完成所需的结果。具体来说,您可以这样做:

        var uri = NavigationService.CurrentSource;
        if(uri != badUri) { /*proceed...*/ } 
        

        这是参考页面:

        http://msdn.microsoft.com/en-us/library/system.windows.navigation.navigationservice.currentsource.aspx

        【讨论】:

        • 不幸的是,这为您提供了 WP7 中当前页面的 URI,而不是上一页。
        • 实际上,CurrentSource 是上次导航到的内容。根据应用程序的结构,您可以在更改之前存储此值,并在需要时检查它。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-26
        • 1970-01-01
        相关资源
        最近更新 更多