Управление кнопкой «Назад» в приложении Windows Phone

Я разрабатываю приложение для Windows Phone 8. Я хочу управлять кнопкой «Назад» телефона для выполнения конкретной задачи. Я хочу, чтобы когда пользователь нажимал кнопку «Назад» на определенной странице, он не переходил на предыдущую страницу, а на страницу, которую я хочу. Есть ли способ управлять аппаратной кнопкой «Назад» в телефоне?


person user3599830    schedule 31.12.2014    source источник


Ответы (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

person pumpkinszwan    schedule 31.12.2014

Хотя можно отменить событие навигации и в игре разрешено отображать экран паузы или подобное, обычно не разрешается использовать кнопку «Назад» для чего-либо, кроме навигации назад в приложении; Согласно требованию 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;
        }
    }
}

Конечно, вы можете реализовать подсказку по-другому, но это должно проиллюстрировать, как это возможно.

person Rowland Shaw    schedule 31.12.2014
comment
Я разрабатываю игру, и для этого необходимо перейти на определенную страницу при нажатии кнопки «Назад». Есть ли у них способ сделать это? - person user3599830; 31.12.2014
comment
Это игра XAML или XNA? - person Rowland Shaw; 31.12.2014
comment
@user3599830 user3599830 в таком случае я обновил пример для вас. - person Rowland Shaw; 31.12.2014