11

ページが読み込まれたときに、UserLoginユーザーデータベースを確認し、データベースが存在しないか、読み取れない場合は、NewUserページに移動します。

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    CheckForUser();
    if (UserExists == false)
        this.Frame.Navigate(typeof(NewUser));
}

問題は、条件NewUserをコメントアウトしても、に移動しないことです。if

4

6 に答える 6

14

NavigateOnNavigatedToフォームメソッドを直接呼び出すことはできません。コードを呼び出す必要があります。そうすればDispatcher機能します。

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
    CheckForUser();
    if (UserExists == false)
        Dispatcher.RunAsync(CoreDispatcherPriority.Normal, 
                            () => this.Frame.Navigate(typeof(NewUser)));
}
于 2012-12-12T05:40:27.080 に答える
1

これは、現在のフレームが完全に読み込まれる前にアプリがナビゲートしようとするために発生します。ディスパッチャは優れたソリューションかもしれませんが、次の構文に従う必要があります。

Windows.UI.Coreを使用します。

    private async void to_navigate()
    {
        await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => this.Frame.Navigate(typeof(MainPage)));
    }
  1. MainPageを目的のページ名に置き換えます。
  2. このto_navigate()関数を呼び出します。
于 2014-10-04T13:06:24.620 に答える
0

Dispatcher.RunIdleAsyncを使用して、UserLoginページが完全に読み込まれるまでナビゲーションを別のページに延期します。

于 2012-12-13T16:03:26.090 に答える
0

これを試して、これが機能するかどうかを確認できます

frame.Navigate(typeof(myPage)); // the name of your page replace with myPage

完全な例

    var cntnt = Window.Current.Content;
    var frame = cntnt as Frame;

    if (frame != null)
    { 
        frame.Navigate(typeof(myPage));
    }
    Window.Current.Activate();

また

Telerikのようなサードパーティのツールを使用したい場合は、このリンクも試してください

クラシックなWindowsフォーム、見事なユーザーインターフェイス

于 2012-12-11T17:15:42.573 に答える
0

OnNavigatedToメソッドをオーバーライドしているようですが、baseメソッドを呼び出さないでください。それが問題の原因かもしれません。ロジックの前にbaseメソッドを呼び出してみてください。

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
    CheckForUser();
    if (UserExists == false)
        this.Frame.Navigate(typeof(NewUser));
}
于 2012-12-12T02:24:20.313 に答える
0

その他は正しいですが、Dispatcherはビューモデルからは機能しないため、ここでその方法を説明します。

SynchronizationContext.Current.Post((o) =>
{
    // navigate here
}, null);
于 2014-05-19T01:54:56.300 に答える