我在我的应用程序中使用页面,让我简单解释一下以供您理解。
我有页面A,B
和C
. 从 page A -> page B
, pageA -> page C
是可能的。
只有当页面 A 从页面 B 而不是从页面 C 恢复时,我才需要执行操作。
我怎样才能使它成为可能,我能否将一些标志数据从页面 B 发送回页面OnBackPressed
A。如果是这样,我在哪里可以听以获取页面 A 中的标志数据。
我在我的应用程序中使用页面,让我简单解释一下以供您理解。
我有页面A,B
和C
. 从 page A -> page B
, pageA -> page C
是可能的。
只有当页面 A 从页面 B 而不是从页面 C 恢复时,我才需要执行操作。
我怎样才能使它成为可能,我能否将一些标志数据从页面 B 发送回页面OnBackPressed
A。如果是这样,我在哪里可以听以获取页面 A 中的标志数据。
在你的App.xaml.cs
创造public static PhoneApplicationPage PrevAppPage;
在事件中初始化它Page b
并在Page C
构造函数和页面 A 上onNavigatedTo
检查其值。并做好各自的工作。
或者您可以enums
在页面构造函数中创建和初始化它们并检查page A's onNavigatedTo
事件中的值。
任何一种方法都应该有效
您可以使用QueryString。从B
到导航时A
,将 QueryString 添加到 URL:
NavigationService.Navigate(new Uri("/PageA.xaml?PreviousPage=b", UriKind.Relative));
然后,在A's
OnNavigatedTo
方法中,您可以检查PreviousPage
QueryString 的值,并在其值为 时做出相应的反应b
。
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
string prevPage="";
NavigationContext.QueryString.TryGetValue("PreviousPage", out prevPage);
if(prevPage == "b")
{
//code to call if A is resuming from B
}
}
根据评论更新(将上面的代码留给其他人)
关于BackKey
. 首先,您可以使用上面的代码,然后从历史记录中删除该特定页面。您可以通过在上面的代码中使用RemoveBackEntry方法来做到这一点:
if(NavigationService.CanGoBack)
NavigationService.RemoveBackEntry();
您可以在此处查看有关Back Stack的更多信息。
或者,您可以跟踪全局变量,App.xaml.cs
例如,每当用户离开页面时更新该变量。然后,在 中A
,您可以检查该变量并查看前一页是什么(并在需要时重置变量,以免意外再次读取它)。