在Window Phone 8.1中OnNavigatedFrom

时间:2014-10-12 23:51:57

标签: c# windows-phone-8 windows-runtime windows-phone-8.1

我正在从Windows Phone 8迁移到Windows Phone 8.1。

我创建了一个Windows Phone 8.1商店应用程序,Hub App。

应用程序创建了OnNavigatedTo和OnNavigatedFrom方法

protected override void OnNavigatedTo( NavigationEventArgs e )
    {
    this.navigationHelper.OnNavigatedTo( e );
    }

protected override void OnNavigatedFrom( NavigationEventArgs e )
    {
    this.navigationHelper.OnNavigatedFrom( e );
    }

我在OnNavigatedFrom中放置了一个断点并尝试关闭应用程序,或者离开应用程序并且没有命中断点,即应用程序没有到达OnNavigatedFrom。

Windows Phone 8应用程序正在破坏OnNavigatedFrom。 WP 8.1的机制是否不同?如果是这样的话?

感谢。

1 个答案:

答案 0 :(得分:3)

问题似乎发生了,因为您正在 Debug 模式(VS附加)中运行。在这种情况下,您的程序在导航/暂停事件的情况下行为略有不同,要正确测试它,您必须手动调用Suspending事件(Lifecyce events dropdown)。在正常情况下,在您离开应用程序后,将立即调用这两个事件( OnNavigatedFrom Suspending )。

要测试它,我们可以在 OnNavigatedFrom 中添加一些东西(基于 Hub App 从Windows应用商店模板中):

protected async override void OnNavigatedFrom(NavigationEventArgs e)
{
    Debug.WriteLine("OnNavigatedFrom");
    Hub.Background = new SolidColorBrush(Colors.Red);
    this.navigationHelper.OnNavigatedFrom(e);
}

在这种情况下,当您运行不附带Visual Studio的应用程序时,当您返回应用程序时,背景应为红色 - 这意味着该事件已被触发。

事实上,当转向WP8.1 WinRT时,还有一个巨大的(IMO)差异 - OnNavigatedTo won't be fired when you come back from suspension

  

注意在Windows Phone上,应用程序暂停时会调用OnNavigatedFrom()。恢复应用程序时不会调用OnNavigatedTo()。

只有在您导航时才会调用它。

更多参考文献:Navigating between pagesLifecycleLaunching, resuming, and multitaskingGuidelines for app suspend and resume