WP7知道何时在“导航到”页面中按下后退键

时间:2011-03-21 20:39:22

标签: windows windows-phone-7

在Windows Phone 7中,有没有办法知道在导航到的页面中是否按下了背面?我知道我们可以拦截当前页面,但我需要知道在我导航到的页面中。即如果有2页说第1页和第2页,则在第2页按下后退按钮。我需要知道第1页是否按下了后退按钮。我需要在第1页的后退按钮上运行一些东西。

6 个答案:

答案 0 :(得分:25)

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
    if (e.NavigationMode == System.Windows.Navigation.NavigationMode.Back)
    ...
}

答案 1 :(得分:5)

这是一种黑客行为,但你可以做到以下几点;在每个页面上覆盖OnBackkeyPress事件。在事件处理程序中添加以下代码:

PhoneApplicationService.Current.State["isbacknav"] = true;

然后,在每个页面的OnNavigatedTo事件处理程序中,检查State字典是否包含该条目。

bool isbacknav = false;
if( PhoneApplicationService.Current.State.ContainsKey( "isbacknav" ) ) {
   isbacknav = (bool)PhoneApplicationService.Current.State["isbacknav"];

   PhoneApplicationService.Current.State["isbacknav"] = false;
   // or
   // PhoneApplicationService.Current.State.Remove( "isbacknav" );
}

答案 2 :(得分:0)

在每个页面上,您可以覆盖OnBackKeyPress事件以检测正在按下的后退键。

在第二页中,您可以设置全局标记或向第一页发送消息 页面无法知道打开/显示的最后一页是什么。你自己会有这个。

答案 3 :(得分:0)

可悲的是,我认为没有一种内置方法可以做到这一点。

当您被告知OnNavigatingFrom时,事件参数包括NavigationMode - http://msdn.microsoft.com/en-us/library/system.windows.navigation.navigatingcanceleventargs.navigationmode(v=vs.95

但是,当你被告知OnNavigatedTo时,事件args不会给你这些信息。

我认为最简单的解决方法可能是在App类中添加NavigationService.Navigating的处理程序 - 您可以在那里缓存NavigationMode。但是,请仔细测试,因为可能存在关于什么代码以什么顺序获取的问题 - 此外,当用户从电话主页或其他应用程序导航回您的页面时,是否正确调用此代码可能存在问题

http://wildermuth.com/2010/10/11/Architecting_WP7_-_Part_1_of_10_Navigation_Framework

中的NavigationService.Navigating有一个很好的解释

答案 4 :(得分:0)

我有完全相同的问题。您可以看到答案here

如果我导航回已加载数据的页面,我不想重新加载数据。最后,我不得不使用标志来确定我是否已经加载了数据。

答案 5 :(得分:0)

你总是可以在App类(App.xaml.cs)中定义一个bool变量。 可以通过以下方法从任何页面访问它们

在App类

public bool backVariable=false;

第1页中的

Page1.xaml.cs 全球或任何方法

App thisApp=Application.Current as App;

然后你可以使用

访问布尔变量

thisApp.backVariable