Главная > Windows Phone 7 > 45 дней с Windows Phone 7. День #3. Аппаратная кнопка «Назад».

45 дней с Windows Phone 7. День #3. Аппаратная кнопка «Назад».

<< День #2. Навигация между страницами. | День #4. Ориентация экрана>>

Это третья статья серии «45 дней с Windows Phone 7».

Вчера мы говорили о навигации между страницами в Windows Phone 7 Silverlight приложениях и о том, как мы можем использовать класс NavigationService для перехода на другую страницу из C# кода. Аппаратная кнопка «Назад» (Back) на телефоне была кратко упомянута, так как она просто работает, и для её работы в стандартном режиме нам ничего делать не требовалось. Однако данная тема заслуживает отдельного поста, так как мы можем обработать нажатие и переопределить то, что делает кнопка «Назад».

Как работает кнопка «Назад»

Данная кнопка работает практически также как аналогичная кнопка в браузере. Телефон записывает историю перемещений, и Вы можете перейти назад по этой истории. Кроме того, как и в браузере, когда при переходах назад Вы можете посетить несколько различных сайтов, на которых были до этого, в телефоне кнопка «Назад» работает для нескольких приложений и интерфейса самого телефона. То есть история переходов не привязана к конкретному запущенному приложению.

Для примера:

  1. Откроем Internet Explorer.
  2. Перейдём на какой-либо сайт.
  3. Нажмём на кнопку «Start»
  4. Откроем настройки телефона.
  5. Ещё раз нажмём на «Start».
  6. Запустим наше приложение, созданное в предыдущей статье.

Теперь нажимая несколько раз кнопку «Назад» мы можем увидеть всё, с чем мы работали в обратном порядке.

Переопределение функциональности кнопки «Назад»

Как Вы могли заметить, в случае с Internet Explorer кнопка «назад» обрабатывается приложением и переводит нас на предыдущую посещённую страницу в браузере. Мы можем обработать нажатие данной кнопки и переопределить то, что после него происходит также и в своих приложениях. Но нельзя забывать об ответственности. Не стоит вводить пользователя в заблуждение непредсказуемой функциональностью.

Например, если Вы показываете на странице всплывающее сообщение, пользователь инстинктивно может нажать «назад», чтобы данное сообщение закрыть. В этом случае стоит обработать такое нажатие, чтобы закрывалось не всё ваше приложение, как в случае с необработанным нажатием, а только всплывающее сообщение.

Или в случае с игрой, может иметь смысл использовать кнопку «назад» для паузы в игре.

Есть несколько правил обработки нажатия кнопки «назад»:

  1. Нажатие кнопки должно означать для пользователя возвращение в состояние предшествующее текущему.
  2. Если пользователь нажимает кнопку «назад» второй раз подряд, следует совершить стандартное действие.
  3. Использование кнопки «назад» для паузы в игре является прекрасной идеей, но если пользователь нажимает данную кнопку второй раз, значит, он действительно хочет перейти назад, а не поставить игру на паузу. Разрешите ему сделать это.

Откроем пример из предыдущей статьи и на странице Pasta.xaml подпишемся на нажатие кнопки «Назад». Это событие страницы (элемент управления PhoneApplicationPage), поэтому в XAML коде подпишемся на него:

<phone:PhoneApplicationPage
BackKeyPress="PhoneApplicationPage_BackKeyPress"

…

А в C# коде обработаем:

private void PhoneApplicationPage_BackKeyPress(object sender, CancelEventArgs e)
{
    if (MessageBox.Show
        ("Вы действительно хотите перейти назад?",
        "Переход назад",
        MessageBoxButton.OKCancel) == MessageBoxResult.Cancel)
    {
        e.Cancel = true;
    }
}

В данном примере при нажатии кнопки «назад» выскакивает сообщение с просьбой подтвердить данное действие. Если пользователь нажимает кнопку «Cancel» переход назад не происходит.

Запустите приложение и проверьте его работу.

Завтра мы рассмотрим вопросы ориентации телефона, а именно портретный и ландшафтный режимы.

Пример кода

  1. Kairiki13
    21 Октябрь 2010 в 16:12 | #1

    А есть ли возможность покрасить значок WindowsPhoneApplication в цвет текущей темы?

  2. new
    18 Ноябрь 2010 в 07:16 | #2

    А каким образом можно настроить такую же реакцию на остальные кнопки?

  3. Ира
    30 Сентябрь 2011 в 17:17 | #3

    Замечательная серия статей! Содержательно и вместе с тем не утомляет большим объемом информации. Спасибо Вам большое за Ваш труд! Буду ждать продолжения.

  4. Антон
    1 Январь 2012 в 17:13 | #4

    Здраствуйте, только начал разбираться с c# вообще. Сам c# у меня выдает ошибку на CancelEventArgs, потребовалось добавить using System.ComponentModel.

  1. Пока что нет уведомлений.
Необходимо войти на сайт, чтобы написать комментарий.