当我的UserLogin
页面加载,我需要检查用户数据库,如果它不存在,或无法读取,我想直接到NewUser
页。
protected override void OnNavigatedTo(NavigationEventArgs e)
{
CheckForUser();
if (UserExists == false)
this.Frame.Navigate(typeof(NewUser));
}
问题是,它从来没有定位到NewUser
,甚至当我注释掉if
条件。
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)));
}
这是因为你的应用程序试图度过当前帧完全加载之前。 调度员可能是一个很好的解决方案,但你必须遵循语法波纹管。
使用Windows.UI.Core;
private async void to_navigate()
{
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => this.Frame.Navigate(typeof(MainPage)));
}
- 你想要的页面名称替换的MainPage。
- 调用此to_navigate()函数。
你可以试试这个,看看这是否正常工作
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窗体,极佳的用户界面
我看你重写的OnNavigatedTo方法,但不调用基方法。 这可能是问题的根源。 尝试任何逻辑之前调用基方法:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
CheckForUser();
if (UserExists == false)
this.Frame.Navigate(typeof(NewUser));
}
使用Dispatcher.RunIdleAsync推迟您导航到另一个页面,直到页面用户登陆完全加载。
其他人是正确的,但由于Dispatcher不会从视图模型的工作,这里是如何做到这一点有:
SynchronizationContext.Current.Post((o) =>
{
// navigate here
}, null);