我想这是一个常见的情况。第一次用户运行应用程序时,如果他们没有保存任何详细信息,我希望他们能看到SignIn.xaml,否则我只想直接进入MainPage.xaml。
通常我会在MainPage的构造函数中添加一个检查,如果他们没有详细信息就导航离开。我的问题是:
NavigationService.Navigate(new Uri("/SignIn.xaml", UriKind.Relative));
出现了空引用错误,我错过了什么?在WP7中有正确的处理方式吗?
谢谢
NavigationService.Navigate(new Uri("/SignIn.xaml", UriKind.Relative));
出现了空引用错误,我错过了什么?在WP7中有正确的处理方式吗?
谢谢
遗憾的是,WP7导航框架对于“第一次运行时执行某些操作”的情况处理得非常不好。
我猜测你所看到的问题是你还没有一个NavigationService
…但即使你有了,你仍然会遇到一个问题:用户仍然可以点击“返回”按钮。你甚至无法解决这个问题,因为用户按下返回键应该退出应用程序...但是,如果用户在第一页自然状态下按下返回键,我不知道有什么方法可以实现这一点。
我找到的唯一解决办法是将“登录”视图放在与正常第一页相同的页面上,并根据条件显示其中之一。是的,这很糟糕...但这是我发现的唯一可行的方法。如果你找到其他方法,我会很高兴听到的 :)
Peter Torr在这里很好地介绍了页面重定向。提供了两种方法,并介绍了它们的相对优点。注意:您可以重定向到登录页面,而不是使用弹出式登录处理建议。
我还建议熟悉他关于“位置”概念的附带文章。
这涉及返回堆栈处理(认证考虑)和涉及登录页面等情况。
不要让主页面导航到登录页面(这会破坏您的后退堆栈),而是有条件地设置第一个页面或将登录显示为弹出窗口。
请参阅此问题以获取更多信息。
我能够使 Peter Torr 的 UriMapper 方法与单独的登录/欢迎页面配合工作。主要的问题就是在登录后再次更改 UriMapper 的 Uri,然后在完成登录/欢迎页面后返回 MainPage.xaml 时更改查询字符串。否则,在从登录页面尝试导航到 MainPage.xaml 时,什么也不会发生。
有关更多信息和示例项目,请参见http://www.geoffhudik.com/tech/2012/2/19/windows-phone-login-navigation.html。欢迎任何想法和更好的建议。
NavigatedTo
回调中(可能名称有误,我是凭记忆打字)检查该布尔值,如果用户已登录,则抛出一个异常,确保它未被处理。这会导致应用程序退出。虽然很丑陋,但这是我能想到的唯一方法,我很想听听其他解决方法。 - Praetorian