11

当我的UserLogin页面加载时,我想检查用户数据库,如果它不存在或无法读取,我想将它定向到NewUser页面。

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

问题是它永远不会导航到NewUser,即使我注释掉了if条件。

4

6 回答 6

14

Navigate不能直接调用formOnNavigatedTo方法。您应该通过调用您的代码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

发生这种情况是因为您的应用程序尝试在当前帧完全加载之前进行导航。Dispatcher 可能是一个不错的解决方案,但您必须遵循以下语法。

使用 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

你可以试试这个,看看这是否有效

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 之类的第 3 方工具,也请尝试此链接

经典的 Windows 窗体,令人惊叹的用户界面

于 2012-12-11T17:15:42.573 回答
0

我看到您覆盖 OnNavigatedTo 方法但不调用基本方法。这可能是问题的根源。尝试在任何逻辑之前调用基本方法:

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 回答
0

使用 Dispatcher.RunIdleAsync 将导航推迟到另一个页面,直到 UserLogin 页面完全加载。

于 2012-12-13T16:03:26.090 回答