我在我的应用程序中使用页面,让我简单解释一下以供您理解。
我有页面A,B和C. 从 page A -> page B, pageA -> page C是可能的。
只有当页面 A 从页面 B 而不是从页面 C 恢复时,我才需要执行操作。
我怎样才能使它成为可能,我能否将一些标志数据从页面 B 发送回页面OnBackPressedA。如果是这样,我在哪里可以听以获取页面 A 中的标志数据。
我在我的应用程序中使用页面,让我简单解释一下以供您理解。
我有页面A,B和C. 从 page A -> page B, pageA -> page C是可能的。
只有当页面 A 从页面 B 而不是从页面 C 恢复时,我才需要执行操作。
我怎样才能使它成为可能,我能否将一些标志数据从页面 B 发送回页面OnBackPressedA。如果是这样,我在哪里可以听以获取页面 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方法中,您可以检查PreviousPageQueryString 的值,并在其值为 时做出相应的反应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,您可以检查该变量并查看前一页是什么(并在需要时重置变量,以免意外再次读取它)。