无法浏览到使用C#在Windows Metro应用页面(Not able to navigate t

2019-07-04 23:39发布

当我的UserLogin页面加载,我需要检查用户数据库,如果它不存在,或无法读取,我想直接到NewUser页。

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

问题是,它从来没有定位到NewUser ,甚至当我注释掉if条件。

Answer 1:

Navigate不能直接称为形成OnNavigatedTo方法。 你应该通过调用代码Dispatcher ,也将努力:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
    CheckForUser();
    if (UserExists == false)
        Dispatcher.RunAsync(CoreDispatcherPriority.Normal, 
                            () => this.Frame.Navigate(typeof(NewUser)));
}


Answer 2:

这是因为你的应用程序试图度过当前帧完全加载之前。 调度员可能是一个很好的解决方案,但你必须遵循语法波纹管。

使用Windows.UI.Core;

    private async void to_navigate()
    {
        await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => this.Frame.Navigate(typeof(MainPage)));
    }
  1. 你想要的页面名称替换的MainPage。
  2. 调用此to_navigate()函数。


Answer 3:

你可以试试这个,看看这是否正常工作

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窗体,极佳的用户界面



Answer 4:

我看你重写的OnNavigatedTo方法,但不调用基方法。 这可能是问题的根源。 尝试任何逻辑之前调用基方法:

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


Answer 5:

使用Dispatcher.RunIdleAsync推迟您导航到另一个页面,直到页面用户登陆完全加载。



Answer 6:

其他人是正确的,但由于Dispatcher不会从视图模型的工作,这里是如何做到这一点有:

SynchronizationContext.Current.Post((o) =>
{
    // navigate here
}, null);


文章来源: Not able to navigate to pages on Windows Metro App using c#