2

我的 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 上触发两次

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

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

有没有人见过这个?

4

2 回答 2

5

Fast Resume这是启用时的正常行为。您必须了解它是如何工作的,才能决定如何处理用户体验。从 MSDN 网站:

使用 Fast Resume,当应用程序恢复时,系统会为启动点的目标创建一个新的页面实例,并将此页面放置在应用程序现有的 backstack 之上。

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

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

另请注意,默认情况下,从 toast 启动应用程序将清除 backstack,因此您会将用户置于无限循环的 toast 中。

关于恢复速度如何以及如何处理不同场景的好读物在这里:适用于 Windows Phone 8 的快速应用恢复

我的建议是,您实际上不需要告诉用户应用程序仍在运行。这是 WP 中应用程序的默认行为,大多数用户已经知道这一点。

于 2013-09-27T05:34:29.410 回答
0

为了在 Alaa Masoud 的回答中再添加一件事,如果您使用 Page2 的 toast 启动应用程序,导航 URI 是“/Pages/Page2.xaml?fromToast=true”,并且如果您在此页面上再次暂停您的应用程序 (Page2)并使用 Page2 toast 启动,相应的导航模式将是重置和刷新。

于 2015-04-01T14:24:31.690 回答