覆盖硬件后退按钮

Overriding Hardware BackButton

我想在我的几个页面上以不同方式处理 windows phone 的后退按钮事件。我的应用程序的页面是按层次顺序排列的,而不是退出应用程序本身(只有在层次结构的最上层页面上才有可能 => 也称为主页)我想导航到层次结构的上一页。

分层导航:

WP Main Menu > App Home Menu > App Page#1 > App Page#2 > ...

我已经定义了一个处理后退按钮按下的相关方法,但我似乎无法相应地在页面的构造函数中注册处理程序,并且那里没有相关的 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);

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

好的,在深入了解生成的 NavigationHelper class 之后,我能够自行解决问题。

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

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

此外,如果您想要其他行为或默认行为,您需要使用 EventRegistrationToken 以先注销当前处理程序。在我的例子中——为了导航回到分层的上一页——这是在 OnNavigatedFrom 方法中完成的。

HardwareButtons::BackPressed -= _hardwareBackPressedEventToken;