代码之家  ›  专栏  ›  技术社区  ›  Carlo

onbackkeypress转到页面的另一个实例

  •  2
  • Carlo  · 技术社区  · 14 年前

    有没有一种方法可以处理onbackkeypress,使其返回到后堆栈中的实际页,而不是返回到同一页的另一个实例?这是我的代码:

    protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
    {
        e.Cancel = true;
    
        base.OnBackKeyPress(e);
    
        this.NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
    }
    

    但它不能满足我的需要。有没有一种方法可以做到这一点,而不使用导航服务,而是获取后堆栈中的实际页面?

    谢谢。

    4 回复  |  直到 14 年前
        1
  •  1
  •   1adam12    14 年前

    简短的回答是不,你不能这样做。除了使用navigationservice逐页向后移动外,无法操作后堆栈。不管是对是错,这都是设计出来的。这是有意义的,因为他们需要确保后退按钮的操作是一致的。

    你要做的是改变后退按钮的行为。这不是onbackkeypress的目的。《WP7设计指南》介绍了后退按钮的以下内容:

    后退按钮可以关闭屏幕 键盘、菜单、对话框、导航到 上一页,退出搜索 操作或甚至在 应用。但是委托人 用法是从当前屏幕移动 到上一个屏幕。

    如果上面没有介绍您的场景,我建议您尝试做一些与微软的后退按钮意图基本一致的事情。

        2
  •  1
  •   avanek    14 年前

    如果希望此行为的原因是在返回时保持上一页的状态,则可以使用依赖注入和MVVM模式来实现此目的。可以在依赖容器中注册ViewModel的单例/实例。这样,当您的视图通过后退按钮被导航到时,如果您依赖MVVM的绑定技术,您可以将该视图模型的单个实例插入到视图中,并具有以前的状态。

    我知道有一个Ninject的电话版本在依赖容器中浮动,所以您不需要滚动自己的注入容器(只需搜索NinjectWP7)。

        3
  •  1
  •   Carlo    14 年前

    我能修好它。这就是问题所在:

    主页->设置页->设置位置页

    设置位置后,我们将用户发送回设置页面 NavigationService.Navigate ,然后当用户按下设置页面中的后退按钮时,它将再次返回到设置位置,当更合理地将其发送到主页时。

    情况如下:

    设置位置->设置页面->(后退按钮)->设置位置页面

    现在,我正在使用 NavigationService.GoBack 而不是 导航服务。导航 在“设置位置”页中:

    setLocationPage(一旦设置了位置,请使用goback())->设置页面(也可在此处使用goback)->主页。

    导航现在很有意义,我用 NavigationService.GoBack() .

    谢谢大家的意见。

        4
  •  0
  •   Mick N    14 年前

    我很好奇你想在这里做什么,为什么你需要导航来实现返回。

    通常情况下,您不会实现覆盖,用户会按回,导航服务会自动将用户带到后堆栈中的前一个bage。

    如果不是这样,你能详细说明原因吗?有一些信息可能会有所帮助,但我怀疑,除了目前存在的问题外,这可能是一种创可贴。