Windows phone 7 在WP7上按下后退按钮,我能找出用户来自哪个页面吗?

Windows phone 7 在WP7上按下后退按钮,我能找出用户来自哪个页面吗?,windows-phone-7,Windows Phone 7,我还没有通过谷歌搜索找到答案,但是有可能知道用户来自哪个页面吗 或者,在按下后退按钮时发送一个查询字符串,这样我就可以知道了 基本上,我有一个页面,我不希望用户通过按后退按钮进入该页面——他们应该进入该页面的唯一方式是从一开始就遵循流程。我尝试做的一个很好的例子是,在用户成功注册帐户后,不允许用户在注册帐户时返回确认设置。我宁愿让他们开始注册。我想不出一种直接检测后退按钮按下的方法 如何使用一个会话变量来记录流程中的当前阶段?您可以使用NavigationService来实现所需的结果。具体来说

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

或者,在按下后退按钮时发送一个查询字符串,这样我就可以知道了


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

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


如何使用一个会话变量来记录流程中的当前阶段?

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

var uri = NavigationService.CurrentSource;
if(uri != badUri) { /*proceed...*/ } 
以下是参考页:


基本上,您希望删除NavigationEntry

为此,请使用

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

(App.Current.RootVisual as PhoneApplicationFrame).RemoveBackEntry()
更好的解决方案:

关于EULA/登录屏幕(和闪屏)-不要将其编入页面。如果你改为让它们弹出或对话框控件,你可以在任何时候显示或隐藏它们(在第一次导航时;当用户点击应用程序的“受保护”部分时;在超时后;等等),并且它们不会占用后台的插槽

来源:

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

您可以使用该属性并在导航到页面时检查后堆栈中的第一个条目

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

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

不幸的是,这将为您提供WP7中当前页面的URI,而不是上一个页面。实际上,CurrentSource是上次导航到的内容。根据应用程序的结构,您可以在更改该值之前存储该值,并在需要时进行检查。我并不真的想删除任何后台条目,因为有多种方法可以访问他们将按下“上一步”按钮的页面。(其中一些可以返回)如果用户点击“上一步”按钮,此解决方案不起作用。@VansFannel:显然,此代码段可以与检查是否打开新页面相结合(参数等于
new
)。