应用程序可以';t导航到主页
本文关键字:导航 主页 应用程序 | 更新日期: 2023-09-27 18:25:44
我的WP8.1 RT应用程序遇到了一个奇怪的问题——我的一位测试人员报告说,他在启动屏幕后看到了黑屏。该应用程序不会崩溃、挂断手机或其他情况——只是黑屏而不是主页。我在代码中实现了一些Trace方法来跟踪问题。代码如下:
// OnLaunched method that gets called when the App starts
protected async override void OnLaunched(LaunchActivatedEventArgs e)
{
await Trace.WriteLineAsync(true, "Launched");
Frame rootFrame = CreateRootFrame();
await Trace.WriteLineAsync(true, "Before - better checkup");
if (rootFrame.Content == null)
{
await Trace.WriteLineAsync(false, "Rootframe content was null, navigating");
if (!rootFrame.Navigate(typeof(MainPage), e.Arguments))
await Trace.WriteLineAsync(false, "Navigation false");
else await Trace.WriteLineAsync(false, "Navigation was ok");
}
await Trace.WriteLineAsync(true, "After - better checkup");
Window.Current.Activate();
}
// Method creating the rootFrame:
private Frame CreateRootFrame()
{
Trace.WriteLineAsync(true, "Create Root frame");
Frame rootFrame = Window.Current.Content as Frame;
if (rootFrame == null)
{
Trace.WriteLineAsync(true, "Root frame was null");
rootFrame = new Frame();
SuspensionManager.RegisterFrame(rootFrame, "AppFrame");
rootFrame.NavigationFailed += OnNavigationFailed;
Window.Current.Content = rootFrame;
Trace.WriteLineAsync(false, "Window content {0}", Window.Current.Content.ToString());
}
return rootFrame;
}
测试人员得到的日志如下:
2014-10-06 13:02:56: Launched
2014-10-06 13:02:56: Create Root frame
2014-10-06 13:02:56: Root frame was null
Window content Windows.UI.Xaml.Controls.Frame
2014-10-06 13:02:57: Before - better checkup
Rootframe content was null, navigating
Navigation false
2014-10-06 13:02:57: After - better checkup
2014-10-06 13:03:01: App.cs suspending event
如您所见,最重要的行是Navigation false
,这意味着
if (!rootFrame.Navigate(typeof(MainPage), e.Arguments))
await Trace.WriteLineAsync(false, "Navigation false");
Navigation返回false-我无法在框架内导航,没有崩溃,没有挂起-(挂起事件有效),只是无法访问MainPage。我完全不知道问题的根源是什么。此外,在我的手机上,一切都正常,其他设备也正常;释放
有人知道我为什么不能导航到主页吗?
编辑-添加导航失败事件:
void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
{
Trace.WriteLineAsync(true, "Failed to load page");
throw new Exception("Failed to load Page " + e.SourcePageType.FullName);
}
感谢Nate Diamond的评论,我开始以不同的方式寻找问题的原因。我加上这个答案,因为有一天它可能会帮助到别人。
最后,经过测试人员的多次尝试和帮助,发现问题是由页面构造函数之前初始化的一个变量引起的。初始化导致异常,该异常被Navigate方法吞噬,因此返回false。
另一件事是初始化导致异常的原因,但那是另一回事。