0

对不起,蹩脚的问题标题,很难用一句话来描述这个问题。问题如下:

我需要确保用户在开始使用该应用程序之前已接受许可协议。我的想法是使用 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 在这里不适用吗?还是有一些解决方法?

谢谢。

4

1 回答 1

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();
        }
    }
于 2013-02-26T21:46:19.530 回答