我有一个首次启动时显示的登录页面。用户输入凭据后,他将被带到应用程序的主页面。此时,如果用户按下后退键,我希望它跳过登录页面并退出。我尝试了这里建议的内容:Remove a page from Navigation Stack(在OnNavigatedTo中,使用NavigationService.GoBack())但它会引发异常,因为后端堆栈中没有其他内容。我读了一些不处理异常的地方基本上是关闭应用程序的唯一方法......
这种关闭应用程序的方法的问题是,除了被黑客攻击之外,它没有点击Application_Closing(),因此我的状态未被保存。
任何人都知道在按下后退键,保存状态和退出应用程序时如何跳过登录页面?
提前致谢!
答案 0 :(得分:4)
是的,这在WP7中导航成为一个巨大的问题 - 很多人抱怨这种类型的问题。要记住的关键是导航模仿网站的导航 - 它的行为不像UserForms,更像是网页及其静态历史。
最简单的解决方法是对用户透明且对您而言非常简单,就是将您作为用户控件引用的第一个登录页面放在实际主页的顶部(即不要使用{{ 1}}用于您的登录页面 - 只是作为主页phone:PhoneApplicationPage
的一部分的控件。在主页上的phone:PhoneApplicationPage
中使用布尔值,表示“如果用户未登录,则显示登录控制,否则只显示主页。”
在保存状态(即墓碑)时,请提出另一个问题,因为这是另一个主题。
答案 1 :(得分:1)
一般的最佳做法是不要在导航堆栈中使用任何您不想要的页面。
在我的情况下,我选择使用Popup来托管我的登录控件。如果他们没有登录,我会从我的主页弹出它。如果他们是我不显示它。这样,如果他们没有登录并回击,他们会退出应用程序。但是,如果他们已登录并且也在主页上,他们会看到他们的数据,如果他们回复,他们也会退出应用程序(不会看到登录页面)。
答案 2 :(得分:0)
对于登录/主页场景,您可以做的一件事是成功登录而不是导航到您调用“GoBack”的主页,这会将它们带回主页,但会弹出登录页面的导航堆叠并允许用户在下次按下后退按钮时退出应用程序。