Windows Phone 7登录界面重定向

9
抱歉,如果这个问题已经有答案,请原谅我没有找到。
我想这是一个常见的情况。第一次用户运行应用程序时,如果他们没有保存任何详细信息,我希望他们能看到SignIn.xaml,否则我只想直接进入MainPage.xaml。
通常我会在MainPage的构造函数中添加一个检查,如果他们没有详细信息就导航离开。我的问题是:
NavigationService.Navigate(new Uri("/SignIn.xaml", UriKind.Relative));

出现了空引用错误,我错过了什么?在WP7中有正确的处理方式吗?

谢谢

4个回答

6

遗憾的是,WP7导航框架对于“第一次运行时执行某些操作”的情况处理得非常不好。

我猜测你所看到的问题是你还没有一个NavigationService…但即使你有了,你仍然会遇到一个问题:用户仍然可以点击“返回”按钮。你甚至无法解决这个问题,因为用户按下返回键应该退出应用程序...但是,如果用户在第一页自然状态下按下返回键,我不知道有什么方法可以实现这一点。

我找到的唯一解决办法是将“登录”视图放在与正常第一页相同的页面上,并根据条件显示其中之一。是的,这很糟糕...但这是我发现的唯一可行的方法。如果你找到其他方法,我会很高兴听到的 :)


哦,那太糟糕了!这是一个非常常见的任务,我不敢相信没有更简洁的方法来完成它。但是感谢您确认了我的想法。 - mat-mcloughlin
试过了。目前工作得很不错。如果有更好的东西出现,那我总是可以改变它。 - mat-mcloughlin
1
我曾经遇到过不想在用户点击返回按钮时显示登录页面的问题。我的解决方法是存储一个全局布尔值,指示用户是否已经登录,然后在登录页面的NavigatedTo回调中(可能名称有误,我是凭记忆打字)检查该布尔值,如果用户已登录,则抛出一个异常,确保它未被处理。这会导致应用程序退出。虽然很丑陋,但这是我能想到的唯一方法,我很想听听其他解决方法。 - Praetorian
@Praetorian:我认为这可能会导致应用程序无法通过验证,因为你不能让应用程序随意退出。也许现在可以工作,但我怀疑它未来不一定能够通过验证。 - Jon Skeet
我不知道现在是否能通过验证,因为我还没有提交应用进行验证 :-). 问题是,如果我按照你说的去做,我需要在第一页之间切换3个视图。我已经为首次用户启动应用程序和后续运行设置了有条件的2个视图的第一页。我想我还得添加第三个视图,只能忍受并维护一个庞大的类。 - Praetorian
显示剩余2条评论

6

Peter Torr在这里很好地介绍了页面重定向。提供了两种方法,并介绍了它们的相对优点。注意:您可以重定向到登录页面,而不是使用弹出式登录处理建议。

重定向初始导航 - Peter Torr's博客

我还建议熟悉他关于“位置”概念的附带文章。

介绍“位置”概念 - Peter Torr's博客

这涉及返回堆栈处理(认证考虑)和涉及登录页面等情况。


2

不要让主页面导航到登录页面(这会破坏您的后退堆栈),而是有条件地设置第一个页面或将登录显示为弹出窗口。

请参阅此问题以获取更多信息。


是的,我已经看了这个解决方案。对它并不是很满意,而且弹出窗口在多页面登录中也不可行。 - mat-mcloughlin

1

我能够使 Peter Torr 的 UriMapper 方法与单独的登录/欢迎页面配合工作。主要的问题就是在登录后再次更改 UriMapper 的 Uri,然后在完成登录/欢迎页面后返回 MainPage.xaml 时更改查询字符串。否则,在从登录页面尝试导航到 MainPage.xaml 时,什么也不会发生。

有关更多信息和示例项目,请参见http://www.geoffhudik.com/tech/2012/2/19/windows-phone-login-navigation.html。欢迎任何想法和更好的建议。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接