【问题标题】:Frame navigation in xaml return falsexaml 中的框架导航返回 false
【发布时间】:2013-04-01 08:17:24
【问题描述】:

你好,
我正在使用 xaml 和 c# 在一个简单的 Windows 8 应用程序中工作。我正在使用 VS 2012 模板创建页面,包括导航系统。

我正在加载大量数据,因此我决定添加一个带有 ProgressRing 的加载页面,并在加载数据完成后导航到第一个应用程序页面:

//loading page
protected async override void OnNavigatedTo(NavigationEventArgs e) {
...
await topCookerManager.GetBlogsAsync();
this.Frame.Navigate(typeof(MainPage));
...
}

它在应用程序启动时运行良好,但是当我在应用程序的第一页上并且当我单击后退按钮时,我会重定向到加载页面。因此,在加载页面中,我正在检查是否加载了数据,如果是,我将重定向到第一页。

if (dataManager.Blogs != null && dataManager.Blogs.Count > 0)
this.Frame.Navigate(typeof(MainPage));

**这就是问题**:我无法从这一点开始导航。导航方法返回 false !我已经测试了 *GoFormard* 方法,它没有抛出异常,但导航没有完成,我停留在加载页面上......

你能告诉我我的错误在哪里吗?或者如何实现加载页面。
谢谢你的帮助。

【问题讨论】:

  • 为什么你用一个页面来显示“正在加载”?您可以使用覆盖整个屏幕的居中进度环来填充深色边框。加载数据时隐藏该边框并做任何你想做的事情。
  • 好的,这是一个解决方案。如果我无法解决我的问题并理解它为什么不起作用,我将使用此操作。

标签: c# xaml windows-8 navigation


【解决方案1】:

您不能在OnNavigatedTo 方法中使用Navigate,因为之前的导航方法此时仍在执行。相反,您可以通过调度程序运行新的导航调用来等待它被加载。

protected async override void OnNavigatedTo(NavigationEventArgs e)
{
     //your other code
     //...
     Dispatcher.RunAsync(CoreDispatcherPriority.Normal, 
                            () => Frame.Navigate(typeof(MainPage))); 
}

它可能在您的代码中第一次运行的原因是您正在等待博客加载的片刻。在这段时间内,导航方法已经完成加载,可以再次调用。

话虽如此,考虑一下您是否真的想要一个加载页面,而不仅仅是像 cmets 中提到的 Xyroid 那样的某种覆盖。

【讨论】:

  • 非常感谢,救了我一整天。只是我在 Dispatcher 之前添加了“等待”,然后它运行得很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-06
  • 1970-01-01
相关资源
最近更新 更多