Я разрабатываю приложение для Windows Phone 8. Я хочу управлять кнопкой «Назад» телефона для выполнения конкретной задачи. Я хочу, чтобы когда пользователь нажимал кнопку «Назад» на определенной странице, он не переходил на предыдущую страницу, а на страницу, которую я хочу. Есть ли способ управлять аппаратной кнопкой «Назад» в телефоне?
Управление кнопкой «Назад» в приложении Windows Phone
Ответы (2)
В приложениях Silverlight (WP7, WP8, WP8.1) вы делаете следующее:
protected override void OnBackKeyPress(CancelEventArgs e)
{
// put any code you like here
MessageBox.Show("You pressed the Back button");
e.Cancel = true;
}
Это будет работать во всех версиях Windows Phone, если вы используете Silverlight.
Если вы используете WinRT для Windows Phone 8.1, все немного иначе:
Откройте NavigationHelper.cs и внесите следующие изменения:
private void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
{
if (this.GoBackCommand.CanExecute(null) && !e.Handled)
{
e.Handled = true;
this.GoBackCommand.Execute(null);
}
}
Теперь на странице вашего приложения (страница, которая будет открыта при нажатии кнопки «Назад») добавьте следующее пространство имен:
using Windows.Phone.UI.Input;
Добавьте этот обработчик в метод конструктора вашей страницы:
HardwareButtons.BackPressed += OnBackPressed;
Затем добавьте этот метод:
private async void OnBackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
{
e.Handled = true;
// add your own code here to run when Back is pressed
}
Примечание. В обоих случаях строка «e.Handled = true» сообщает ОС, что нажатие кнопки «Назад» было обработано, и поэтому ОС не будет действовать по умолчанию. Если вы удалите эту строку, запустится ваш собственный код, и ОС также выполнит собственную обратную навигацию.
Помните о комментарии Роуленда о переопределении кнопки «Назад» — если вы не используете интуитивно понятную навигацию, вы запутаете пользователя и рискуете, что ваша игра будет отклонена (если вам просто нужно управлять экраном паузы или меню, это будет хорошо, но если вы реализуете что-то бесполезное, например, использование кнопки «Назад» в качестве элемента управления игрой, у вас будут проблемы).
В моем блоге есть тот же ответ с немного более подробной информацией, если вам это нужно: http://grogansoft.com/blog/?p=572
Хотя можно отменить событие навигации и в игре разрешено отображать экран паузы или подобное, обычно не разрешается использовать кнопку «Назад» для чего-либо, кроме навигации назад в приложении; Согласно требованию 5.2.4 требований технической сертификации для Windows Phone
Для обеспечения единообразия взаимодействия с пользователем кнопку «Назад» следует использовать только для навигации назад в приложении.
Если вы создаете приложение XAML, в котором разрешена отмена «обратной» операции, например, в соответствии с 5.2.4.4 требований технической сертификации для Windows Phone:
В играх, когда кнопка «Назад» нажата во время игры, игра может выбрать отображение контекстного меню или диалогового окна паузы или может направить пользователя к предыдущему экрану меню.
Затем вы можете реализовать это, переопределив метод OnNavigatingFrom
на своей странице и установив свойство Cancel
для NavigatingCancelEventArgs
, что-то вроде этого примера из Функции фреймов, страниц и навигации для Windows Phone 8:
protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
base.OnNavigatingFrom(e);
// If the navigation can be cancelled, ask the user if they want to cancel
if (e.IsCancelable)
{
MessageBoxResult result = MessageBox.Show("Do you want to stay here?", "Confirm Navigation from Page", MessageBoxButton.OKCancel);
if (result == MessageBoxResult.OK)
{
// User wants to stay here
e.Cancel = true;
return;
}
}
}
Конечно, вы можете реализовать подсказку по-другому, но это должно проиллюстрировать, как это возможно.