什么是" OnBackKeyPress"

时间:2014-04-16 13:54:37

标签: windows-runtime back windows-phone-8.1 win-universal-app

在Windows Phone 8.0中,我使用它来处理后退按钮:

protected override void OnBackKeyPress(CancelEventArgs e)
{
    base.OnBackKeyPress(e);        
}

“页面”控件上不存在此事件。如何处理WP 8.1中的后退按钮?

3 个答案:

答案 0 :(得分:3)

看看Windows.Phone.UI.Input.HardwareButtons

如果您向项目添加基本页面,那么VS将向您的项目添加NavigationHelper类,这有助于浏览您的应用程序,您还可以在源代码中看到它正在订阅Windows.Phone.UI.Input.HardwareButtons.BackPressed。< / p>


如果您想扩展处理后退按钮(管理Eventhandler队列等),您可以查看at this answer - 这将有助于防止向后导航(如果您不需要)它)并添加更多行为。

答案 1 :(得分:2)

您可以像上面的评论一样使用Windows.Phone.UI.Input.HardwareButtons。但是这个事件总是被扔进每一页。所以你可以使用类似下面的例子,这只会被扔进活动页面。


protected override void OnNavigatedTo(NavigationEventArgs e)
{
    Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed;
}

void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
{
    e.Handled = true;
    Windows.Phone.UI.Input.HardwareButtons.BackPressed -= HardwareButtons_BackPressed;
    // Navigate to a page
}

我用这种方式解决了我的问题。

答案 2 :(得分:1)

我将我的wp8 proyect迁移到wp8.1 universal,所以不要碰太多我的代码:

在我的页面基类中,在构造函数中,我添加了:

 public VBasePage()
    {
        Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed;
    } 

然后:

private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
    {
        var args = new CancelEventArgs();
        OnBackKeyPress(args);
        if (args.Cancel)
        {
            e.Handled = true;
        }
    }
protected virtual void OnBackKeyPress(CancelEventArgs e)
    {
    }

所以我可以使用我当前的OnBackKeyPress方法覆盖