有没有办法以这样的方式处理OnBackKeyPress,它返回到后台堆栈中的实际页面而不是返回到同一页面的另一个实例?这是我的代码:
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
e.Cancel = true;
base.OnBackKeyPress(e);
this.NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
}
但它没有做我想要的。有没有办法在不使用NavigationService的情况下执行此操作并在后端堆栈中获取实际页面?
感谢。
答案 0 :(得分:1)
简短的回答是不,你不能这样做。除了使用NavigationService逐页向后移动之外,无法操纵后台堆栈。无论是对还是错,这都是设计上的。这有点意义,因为他们需要确保后退按钮的操作是一致的。
您要做的是实际更改后退按钮的行为。这不是OnBackKeyPress的用途。 WP7设计指南说明了关于后退按钮的内容:
后退按钮可以关闭屏幕 键盘,菜单,对话框,导航到 上一页,退出搜索 操作甚至在它们之间切换 应用。但校长 用法是从当前屏幕移动 到上一个屏幕。
如果您的方案未被上述内容涵盖,我建议您尝试做一些基本上符合微软后退按钮意图的事情。
答案 1 :(得分:1)
如果你想要这种行为的原因是在导航回来时保持你上一页的状态,你可以使用依赖注入和MVVM模式来实现这一点。您可以在依赖项容器中注册viewmodel的单例/实例。这样,当您通过后退按钮导航到视图时,如果您依赖MVVM的绑定技术,则可以将视图模型的单个实例注入视图并具有先前的状态。
我知道有一个Ninject的手机版本为依赖容器浮动,所以你不需要滚动你自己的注入容器(只搜索Ninject wp7)。
答案 2 :(得分:1)
我能够解决它。这就是问题所在:
MainPage - > SettingsPage - > SetLocationPage
设置了位置后,我们将用户发送回带有NavigationService.Navigate
的SettingsPage,然后当用户按下SettingsPage中的后退按钮时,它会再次返回到SetLocation,此时发送它更有意义到主页。
原因如下:
SetLocation - > SettingsPage - > (后退按钮) - > SetLocationPage
现在,我在SetLocationPage中使用NavigationService.GoBack
而不是NavigationService.Navigate
:
SetLocationPage(一旦设置了位置,使用GoBack()) - > SettingsPage(此处也使用GoBack) - >的MainPage。
现在导航很有意义,我使用NavigationService.GoBack()
解决了这个问题。
感谢大家的投入。
答案 3 :(得分:0)
我很好奇你在这里想做什么以及为什么你需要导航回来实现。
通常你没有实现覆盖并且用户按下,导航服务会自动将用户带到后面堆栈中的前一个bage。
如果情况不是这样,你可以详细说明原因。有一些信息可能有所帮助,但我怀疑它现在是一个现有问题的助推器。