【发布时间】:2011-08-10 02:33:46
【问题描述】:
我没有太多运气通过谷歌搜索找到答案,但是有可能知道用户来自哪个页面吗?
或者,在按下后退按钮时发送一个查询字符串,以便我知道?
基本上,我有一个页面,我不希望用户通过按后退按钮进入 - 他们应该到达那里的唯一方法是如果他们从一开始就遵循该过程。我正在尝试做的一个很好的例子是不允许用户在成功注册后注册帐户时返回确认设置。我宁愿他们去注册开始。
【问题讨论】:
标签: windows-phone-7
我没有太多运气通过谷歌搜索找到答案,但是有可能知道用户来自哪个页面吗?
或者,在按下后退按钮时发送一个查询字符串,以便我知道?
基本上,我有一个页面,我不希望用户通过按后退按钮进入 - 他们应该到达那里的唯一方法是如果他们从一开始就遵循该过程。我正在尝试做的一个很好的例子是不允许用户在成功注册后注册帐户时返回确认设置。我宁愿他们去注册开始。
【问题讨论】:
标签: windows-phone-7
您可以使用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();
}
}
【讨论】:
New)。
基本上你想删除你的 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
【讨论】:
一种方法是在每个页面上覆盖OnBackKeyPress(主页除外,因为那将毫无意义)。在该函数中,将当前页面的名称分配给全局变量。现在,您导航回的页面可以检查全局变量并确定您是如何到达那里的。
【讨论】:
我想不出直接检测后退按钮按下的方法。
记录流程中当前阶段的会话变量怎么样?
【讨论】:
您可以使用 NavigationService 来完成所需的结果。具体来说,您可以这样做:
var uri = NavigationService.CurrentSource;
if(uri != badUri) { /*proceed...*/ }
这是参考页面:
【讨论】: