Невозможно пройти тесты, в окне с вопросами пусто |
Навигация, ориентация экрана
29.2. Работа с кнопкой Назад
Кнопка Назад играет огромную роль в навигации. Если говорить о нашем приложении, то можно заметить, что по умолчанию она возвращает нас со страниц Game и About на главную страницу, при нажатии этой кнопки на главной странице мы выходим из программы.
Когда, в предыдущем примере, мы использовали клавиатуру для ввода имени пользователя, нажатие на кнопку Назад скрывало клавиатуру. Когда в том же примере на экран выводилось сообщение, кнопка Назад позволяла скрыть его окно. Это – типичное поведение кнопки Назад, которое можно наблюдать во множестве приложений для Windows Phone.
Кроме того, если говорить о навигации между окнами программы или программами, телефон ведет журнал переходов, и последовательное нажатие кнопки Назад позволяет вернуться на некоторую глубину этого журнала, перемещаясь как между приостановленными приложениями, так и между страницами одного приложения.
При этом обычное нажатие кнопки переносит нас на предыдущий экран в журнале, а длительное показывает в уменьшенном виде весь доступный журнал. На рис. 29.5. показан журнал переходов в эмуляторе, появившийся после длительного нажатия на кнопку Назад. Предварительно мы открывали различные приложения в эмуляторе и возвращались из них на домашний экран нажатием кнопки Start.
Журнал можно перематывать, находить таким образом нужный экран и прикосновением к этому экрану активировать нужное приложение. При работе в Internet Explorer, который встроен в Windows Phone, кнопка Назад работает как соответствующая кнопка в обычном браузере – то есть – позволяет перемещаться по истории посещения страниц.
Функциональность кнопки Назад можно переопределять, однако, делая это, не следует вводить пользователя в заблуждение неожиданным поведением системы, придерживаясь той логики, которая описана выше. Если вы, всё же, вмешались в работу системы с кнопкой Назад, рекомендуется по повторному нажатию этой кнопки выполнить действие, которое ожидает пользователь, нажимая на неё. В целом, нажатие на кнопку Назад должно переводить приложение или систему в предшествующее текущей ситуации состояние.
Обратите внимание на XAML-код наших страниц. Уровень страницы, тег, включающий в себя все остальные, представлен объектом PhoneApplicationPage.
Нажатие на кнопку Назад – это событие уровня страницы. Для его перехвата, мы можем как вручную добавить код в редакторе, так и, перейдя в область настройки свойств элемента PhoneApplicationPage, добиться отображения его свойств в окне Свойства (рис. 29.6), и ввести имя для необходимого нам обработчика события. Это приведет как к подписке на событие, так и к созданию кода обработчика в соответствующем CS-файле.
В итоге код описания свойств элемента PhoneApplicationPage принимает такой вид, как показано в листинге 29.3 (обратите внимание на новую строчку BackKeyPress="PhoneApplicationPage_BackKeyPress">
<phone:PhoneApplicationPage x:Class="P22_1.Game" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}" SupportedOrientations="Landscape" Orientation="Landscape" mc:Ignorable="d" d:DesignHeight="480" d:DesignWidth="728" shell:SystemTray.IsVisible="True" BackKeyPress="PhoneApplicationPage_BackKeyPress">Листинг 29.3. Код подписки на событие нажатия на кнопку
В листинге 29.4 приведен пустой обработчик события
private void PhoneApplicationPage_BackKeyPress(object sender, System.ComponentModel.CancelEventArgs e) { }Листинг 29.4. Пустой обработчик события
Введем в обработчик следующий код, листинг 29.5.
private void PhoneApplicationPage_BackKeyPress(object sender, System.ComponentModel.CancelEventArgs e) { MessageBoxResult msgRes = MessageBox.Show("Действительно хотите перейти на главную страницу?", "Подтверждение перехода", MessageBoxButton.OKCancel); if (msgRes == MessageBoxResult.Cancel) { e.Cancel = true; } }Листинг 29.5. Код обработчика события
Здесь мы формируем окно сообщения, ожидаем нажатия на одну из кнопок (ОК или Отмена) и записываем результат в переменную msgRes. После этого проверяем, нажал ли пользователь кнопку Отмена (Cancel). Если нажал, присваиваем свойству Cancel, которое имеет объект типа System.ComponentModel.CancelEventArgs значение True, что означает отмену операции.
При этом переход на главный экран не происходит. Если пользователь нажал ОК, операция не отменяется и осуществляется возврат на главную страницу.
На рис. 29.7 вы можете видеть страницу Game с сообщением, которое выводится после нажатия на кнопку Назад.
Обратите внимание на то, что в нашем приложении некоторые страницы имеют портретную ориентацию (это главная страница, страница информации о программе), некоторые – ландшафтную (страница игры). Эта ориентация не меняется при повороте экрана. Это – вполне обычная практика для некоторых приложений. Для других же изменение ориентации страницы при смене ориентации экрана – насущная необходимость. Например, веб-браузер потерял бы многое в удобстве использования, не меняй он ориентацию страницы при повороте экрана. Ориентацией страниц можно управлять, продолжим работу над нашим примером, настроив таким образом страницу About.