На эмуляторе Windows Phone 7, когда аппаратная кнопка "Назад" нажимается, состоит в том поведение по умолчанию, чтобы это закрыло Ваше текущее приложение. Я хочу переопределить это поведение по умолчанию так, чтобы оно перешло к предыдущей странице в моем приложении.
После некоторого исследования кажется, что должно быть возможно сделать это путем переопределения метода OnBackKeyPress, как так:
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
// do some stuff ...
// cancel the navigation
e.Cancel = true;
}
Однако нажатие на кнопку "Назад" все еще закрывает мое приложение. Ставя точку останова, вышеупомянутый метод показывает, что это никогда не называют. У меня есть другая точка останова на моем коде выхода приложения, и эта точка останова поражена.
Есть ли что-то еще, что я должен сделать для прерывания кнопки "Назад"?
Похоже, что невозможно переопределить метод OnBackKeyPress для перехвата нажатия клавиши "назад", если вы не используете метод Navigate
для перемещения между страницами в вашем приложении.
Мой предыдущий метод навигации заключался в изменении визуального отображения корня, например:
App.Current.RootVisual = new MyPage();
Это означало, что я мог держать все свои страницы в памяти, поэтому мне не нужно было кэшировать данные, хранящиеся на них (некоторые данные собираются по сети).
Теперь, похоже, мне нужно использовать метод Navigate на фрейме страницы, который создает новый экземпляр страницы, на которую я перехожу.
(App.Current.RootVisual as PhoneApplicationFrame).Navigate(
new Uri("/MyPage.xaml", UriKind.Relative));
Как только я начну использовать этот метод для навигации, я смогу переопределить обработку кнопки "Назад" способом, описанным в моем вопросе...