大家,
与大多数应用程序一样,如果设置了密码,我需要为我的应用程序包含一个登录页面。应用程序的预期行为是,只有设置了密码,它才会导航到passwordpage.xaml,输入正确的密码后,应该导航到mainpage.xaml。如果未设置密码,则应直接导航到mainpage.xaml。
以下博客建议需要重新导航,以便在app.xaml.cs中包含一个检查,以确定应用程序需要导航到哪个页面。
但现在问题是,密码页面的进一步导航没有发生。它在设置密码时导航到密码页面,但是在检查密码匹配后,它不会在mainpage.xaml上移动,而是返回到rootframe_navigating事件处理程序并执行循环。
http://blogs.msdn.com/b/ptorr/archive/2010/08/28/redirecting-an-initial-navigation.aspx
这是app.xaml.cs中的功能
void RootFrame_Navigating(object sender, NavigatingCancelEventArgs e)
{
//throw new NotImplementedException();
if (e.Uri.ToString().Contains("/MainPage.xaml") != true)
return;
CycleManager pCycMan = CycleManager.instance;
bool checkOk = false;
pCycMan.ReadFromIsolatedStorage();
if (pCycMan.GetPasswordEnabled())
{
checkOk = true;
}
e.Cancel = true;
RootFrame.Dispatcher.BeginInvoke(delegate
{
if (checkOk)
RootFrame.Navigate(new Uri("/PasswordPage.xaml", UriKind.Relative));
else
RootFrame.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
});
}
这是写在passwordpage.xaml
按钮上的功能 private void OnClick(object sender, RoutedEventArgs e)
{
CycleManager pCycMan = CycleManager.instance;
if (pCycMan.GetPassword() == passwordBox1.Password)
{
NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
}
else
{
MessageBox.Show("Incorrect Password");
}
}
有什么建议吗?
Alfah
答案 0 :(得分:2)
如果您要返回所在页面后面的页面,则应使用内置的NavigationService.GoBack()
方法。这让手机可以处理后页堆栈。
如果您需要向前进展但从不返回页面,则在Mango中,您现在需要使用NavigationService.RemoveBackEntry()
从后台手动删除该页面。
查看您的代码,导航处理程序将始终触发。您似乎正在检查是否启用了密码而不是用户是否经过身份验证。我只想说检查密码的逻辑是错误的。
答案 1 :(得分:0)
我管理这样解决它,
我不知道它是否是正确的方法。但它的确有效。首先,我将默认的起始页面更改为WMAppManifest.xaml中名为RootPage.xaml的不存在的页面。然后在事件处理程序中,我将MainPage.xaml更改为RootPage.xaml
if (e.Uri.ToString().Contains("/RootPage.xaml") != true)
return;
我不得不从backstack条目中删除密码页面,否则返回退出应用程序将再次带来密码页面。
Alfah