在Windows Phone 7中,有没有办法知道在导航到的页面中是否按下了背面?我知道我们可以拦截当前页面,但我需要知道在我导航到的页面中。即如果有2页说第1页和第2页,则在第2页按下后退按钮。我需要知道第1页是否按下了后退按钮。我需要在第1页的后退按钮上运行一些东西。
答案 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;
Page1.xaml.cs 全球或任何方法
App thisApp=Application.Current as App;
然后你可以使用
访问布尔变量 thisApp.backVariable