覆盖硬件后退按钮

时间:2015-03-20 13:05:04

标签: xaml windows-phone-8 c++-cx

我想以不同方式处理我手机上几个页面上的后退按钮事件。我的应用程序的页面是按层次排序的,而不是退出应用程序本身(在层次结构最上面的页面上也应该是唯一的=>也称为主页)我想导航到分层的上一页面。< / p>

分层导航:

  

WP主菜单&gt;应用程序主菜单&gt;应用页面#1&gt;应用页面#2&gt; ...

我已经定义了一个处理后退按钮的相关方法,但我似乎无法相应地在页面的构造函数中注册处理程序,并且没有相关的C ++ / CX指南有!

private:
void Page::HardwareBackButtonPressed(Platform::Object^ sender,
    Windows::Phone::UI::Input::BackPressedEventArgs^ e)
{
    e->Handled = true;
    if (Frame->CanGoBack == true)
        Frame->GoBack();
    else
        Frame->Navigate(MainPage::typeid, safe_cast<Platform::Object^>(0));
}

处理程序的注册看起来像这样(似乎无效)

HardwareButtons::BackPressed += ref new Windows::Foundation::EventHandler<BackPressedEventArgs^>(
    this, &HardwareBackButtonPressed);

我甚至不确定这是否是正确的方法。

1 个答案:

答案 0 :(得分:1)

好的,在对生成的NavigationHelper课程进行了深入研究后,我能够自己解决问题。

为了实现硬件后退按钮的页面特定行为,您需要在OnNavigatedTo方法中注册相应的事件处理程序。

_hardwareBackPressedEventToken = HardwareButtons::BackPressed += ref new EventHandler<BackPressedEventArgs^>(
    this, &thisPage::HardwareBackButtonPressed);

此外,如果您想要另一个或默认行为,您需要使用EventRegistrationToken以便首先取消注册当前处理程序。在我的情况下 - 导航回到分层的上下一页 - 这是在OnNavigatedFrom方法中完成的。

HardwareButtons::BackPressed -= _hardwareBackPressedEventToken;