WP8 OnNavigatedTo点击Toast Notification后会激活TWICE?

lha*_*han 2 notifications toast windows-phone windows-phone-8

我的Toast通知有一个奇怪的问题(或者可能是我误解的预期行为).我想要的只是让toast导航回到用户点击"开始"按钮时所在的页面.

场景:

用户打开应用程序,它们显示为Page1.xaml.用户点击按钮导航到Page2.xaml.从这里,他们点击"开始"按钮.这是我在Page2.xaml.cs上设置的Toast通知:

Microsoft.Phone.Shell.ShellToast toast = new Microsoft.Phone.Shell.ShellToast();
toast.Content = "App is still running!";
toast.Title = AppResources.ApplicationTitle;
toast.NavigationUri = new Uri("/Pages/Page2.xaml?fromToast=true", UriKind.Relative);
toast.Show();
Run Code Online (Sandbox Code Playgroud)

我正在传递fromToast查询字符串,以便我可以正确处理"恢复".但是,当我点击显示的Toast通知时,我的OnNavigatedTo事件会在Page2.xaml上触发两次.

OnNavigatedTo在点击Toast之后第一次触发Page2.xaml,没有查询字符串参数,但是之后,它再次使用我的fromToast参数触发.

为什么要开两次?这是预期的吗?如果我NavigationUri从我的删除属性toast,点击Toast只会将应用程序带回Page1.xaml,这不是我想要的.

谁看过这个吗?

Ala*_*oud 5

Fast Resume是启用时的正常行为.您必须了解它如何工作以决定您希望如何处理用户体验.从MSDN站点:

使用"快速恢复",当应用程序恢复时,系统会为启动点的目标创建新的页面实例,此页面将放置在应用程序现有的后台堆栈之上.

因此,基本上点击toast将导致创建一个新的Page2实例,因此NavigatedTo在没有查询字符串的情况下调用它.由于您的toast具有深层链接,因此将请求另一个导航,从而导致创建另一个Page2实例并NavigatedTo使用fromToast=true查询字符串调用.

您可以通过检查e.NavigationMode属性来确定导航模式.这应该是NavigationMode.Reset第一次,然后NavigationMode.New在第二时间.

另请注意,默认情况下,从吐司启动应用程序将清除后台堆栈,因此您将使用户进入无限循环的祝酒词.

关于恢复如何快速工作以及如何处理不同场景的详细介绍如下:Windows Phone 8的快速应用简历

我的建议是,你真的不需要告诉用户应用程序仍在运行.这是WP中应用程序的默认行为,大多数用户已经知道.