我的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();
我在查询字符串上传递fromToast
,以便我可以正确处理“恢复”。但是,当我点按显示的Toast通知时,我的OnNavigatedTo
事件会在Page2.xaml 上触发两次。
点击Toast后第一次{Page 1}}在Page2.xaml上触发,没有查询字符串参数,但之后,它再次使用我的OnNavigatedTo
参数触发。
为什么要开两次?这是预期的吗?如果我从我的fromToast
中移除了NavigationUri
属性,则点击Toast只会将应用返回到Page1.xaml,这不是我想要的。
有没有人见过这个?
答案 0 :(得分:5)
这是启用Fast Resume
时的正常行为。您必须了解它如何工作以决定您希望如何处理用户体验。来自MSDN网站:
使用“快速恢复”,当应用程序恢复时,系统会为启动点的目标创建一个新的页面实例,此页面将放置在应用程序现有的后台堆栈之上。
所以基本上点击toast会导致创建一个新的Page2实例,因此调用NavigatedTo
时没有查询字符串。由于您的toast具有深层链接,因此将请求另一个导航,从而导致创建另一个Page2实例,并使用NavigatedTo
查询字符串调用fromToast=true
。
您可以通过检查e.NavigationMode
属性来确定导航模式。它应该是第一次NavigationMode.Reset
,NavigationMode.New
第二次。
另请注意,默认情况下,从吐司启动应用程序将清除后台堆栈,因此您将使用户进入无限循环的祝酒词。
有关简历如何快速以及如何处理不同方案的详细信息,请访问:Fast app resume for Windows Phone 8
我的建议是,您并不需要告诉用户应用程序仍在运行。这是WP中应用程序的默认行为,大多数用户已经知道。
答案 1 :(得分:0)
为了给Alaa Masoud的答案添加一件事,如果你用Page2的toast启动应用程序,导航URI是" /Pages/Page2.xaml?fromToast = true",并且如果您在此页面上再次暂停您的应用程序(第2页)并使用Page2 toast启动,则相应的导航模式将为“重置和刷新”。