0

つまらない質問のタイトルで申し訳ありません。問題を 1 文で説明するのは難しいです。問題は次のとおりです。

アプリの使用を開始する前に、ユーザーがライセンス契約に同意したことを確認する必要があります。私の考えは、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 に答える