C# UriMapper和重写的URI问题

C# UriMapper和重写的URI问题,c#,silverlight,windows-phone-7,windows-phone-8,C#,Silverlight,Windows Phone 7,Windows Phone 8,对不起,这个蹩脚的题目,很难用一句话来描述这个问题。问题如下: 我需要确保用户在开始使用应用程序之前已接受许可协议。我的想法是使用UriMapper,它将检查用户之前是否已接受协议,如果未接受,则将其重定向到许可协议页面 public override Uri MapUri(Uri uri) { if(!settingsStorage.IsLicenseAgreementAccepted) return LicenseAgreementPage;

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

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


谢谢。

我遇到了类似的问题,有些页面需要用户登录。如果用户试图转到需要登录的页面,他们将被重定向到登录页面,然后被发回。也许你可以用同样的策略

    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();
        }
    }

这意味着我需要修改所有页面,这可能是应用程序启动后的第一个页面(由于深度链接,可能会有单独的页面。这不是一个理想的解决方案,但无论如何还是要感谢您的共享。是的,但我这样做是通过让我的所有页面都继承一个可以处理此类问题的基页。看起来这应该是可行的……奇怪的是,您没有获得正确的URI,也许看看它描述了一种类似于laun的方法。)基于给定的URI对wp8应用程序的特定页面进行ch