我可以在WP7的Back Button按下找出用户来自哪个页面吗?

时间:2011-08-09 15:49:39

标签: windows-phone-7

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

或者,按下后退按钮发送查询字符串,我可以告诉?

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

5 个答案:

答案 0 :(得分:9)

您可以使用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();
    }
}

答案 1 :(得分:4)

基本上你想要删除你的NavigationEntrys。

为此,请使用NavigationService.RemoveBackEntry

您可以使用以下代码段从任何地方访问NavigationService:

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

更好的解决方案:

关于EULA /登录屏幕(和Splash) - 不要将它们变成页面。如果您改为使用Popup或Dialog控件,您可以随时显示或隐藏它们(在第一次导航时;当用户点击应用程序的“受保护”部分时;超时后;等等)消耗后台堆中的一个插槽。

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

我想不出直接检测后门按键的方法。

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

答案 4 :(得分:0)

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

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

以下是参考页面:

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