对于蹩脚的问题标题,很难用一句话来描述这个问题。问题如下:
我需要确保用户在开始使用该应用之前已经接受了许可协议。我的想法是使用UriMapper,它将检查用户之前是否已接受协议,如果没有,则将他或她重定向到许可协议页面。
public override Uri MapUri(Uri uri)
{
if(!settingsStorage.IsLicenseAgreementAccepted)
return LicenseAgreementPage;
return uri;
}
但是,在许可协议页面上,如果我覆盖OnNavigatedTo,我看到导航URI不是当前页面的URI,而是非映射URI,例如我的主页的地址。因此,当我尝试导航到该主页时,没有任何反应,因为导航服务认为我已经在那里了。
public partial class LicenseAgreementPage : PhoneApplicationPage
{
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e); // somehow e.Uri equals to /MainPage.xaml, instead of /LicenseAgreementPage.xaml
}
}
那么如何克服这个? UriMapper不适用于此吗?或者有一些解决方法吗?
感谢。
答案 0 :(得分:0)
我遇到了类似的问题,其中一些页面要求用户登录。如果用户尝试转到需要登录的页面,则会将其重定向到登录页面,然后再发回。也许你可以使用相同的策略?
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);
if (Requirelogin && !CurrentAppManager.IsUserLoggedIn)
{
// Transfer URI to the login page and save it, after successful login,
// the login page navigate back to the stored URI
((PhoneApplicationFrame)Application.Current.RootVisual).Navigate(new Uri("Login?" + Helpers.URI + "=" + e.Uri.ToString(), UriKind.Relative));
}
// if the user has just come from Login
// remove it from the stack so they dont hit when pressing back
var entry = NavigationService.BackStack.FirstOrDefault();
if (entry != null && entry.Source.OriginalString.Contains("Login"))
{
NavigationService.RemoveBackEntry();
}
}