Как сделать так, чтобы кнопка «Назад» вернулась назад, когда отображается экранная клавиатура?

У меня есть простая форма ввода, состоящая из одного текстового поля и кнопок «ОК / Отмена». Чтобы сэкономить пользователю несколько нажатий, я перемещаю фокус в текстовое поле, когда страница отображается, поэтому появляется клавиатура. На этом этапе я хочу, чтобы кнопка «Назад» вела себя так же, как отмена и возвращалась назад при нажатии, но на самом деле она просто удаляет фокус из текстового поля, даже не вызывая событие BackKeyPress. При следующем нажатии он действительно отодвигается, но это два щелчка вместо одного.

Итак, у меня есть два вопроса

  1. Как заставить кнопку назад "вернуться назад" даже когда клавиатура видна?
  2. Я пытаюсь сделать что-то плохое с точки зрения дизайна взаимодействия WP7?

person Sergey Aldoukhov    schedule 26.09.2010    source источник


Ответы (2)


Что вы можете сделать, так это обработать метод KeyUp текстового поля. Когда нажата клавиша, проверьте, аппаратная ли это клавиша возврата. В моем тесте аппаратный ключ возврата имеет PlatformKeyCode 27. Я не уверен, меняется ли это между аппаратными устройствами. Однако, если это не так, вы можете сделать следующее:

    private void TextBox_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
    {
        if(e.PlatformKeyCode == 27)
        {
           //Navigation code
        }

    }

Что касается того, хорошая ли это идея, я не уверен. По отношению к экранной клавиатуре основная функция клавиши возврата - закрытие клавиатуры. Это то, что пользователи в основном будут испытывать в различных приложениях, поэтому они могут ожидать от вас именно этого. Однако, поскольку ваш SIP отображается автоматически, я думаю, вы можете утверждать, что это почти часть самого макета. Я ничего не нашел в рекомендациях по пользовательскому интерфейсу об этом, но у вас должен быть прочтите на случай, если я что-то пропустил.

person keyboardP    schedule 26.09.2010
comment
Событие KeyUp не запускается при нажатии аппаратной кнопки возврата. - person Mihai Damian; 27.08.2015
comment
@MihaiDamian - Ответу почти 5 лет. Я считаю, что последний способ - обработать событие BackPressed msdn .microsoft.com / en-us / library / windows / apps / xaml /. - person keyboardP; 28.08.2015

Вы проверили, можете ли вы переопределить OnBackKeyPressed?

Что касается того, что вам разрешено делать с клавишей Back, из руководящих принципов сертификации приложений:

5.2.4 Использование кнопки "Назад"

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

а. Нажатие кнопки «Назад» на первом экране приложения должно закрыть приложение.

б. Нажатие кнопки «Назад» должно вернуть приложение на предыдущую страницу.

c. Если на текущей странице отображается контекстное меню или диалоговое окно, нажатие кнопки «Назад» должно закрыть меню или диалоговое окно и отменить обратную навигацию на предыдущую страницу.

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

Этот вопрос SO также может оказаться полезным. ...

Я собираюсь согласиться с keyboardP в том, что вам не следует переопределять поведение по умолчанию того, как SIP взаимодействует с аппаратной кнопкой возврата, но вы всегда можете отправить его и посмотреть, что произойдет :)

person Henry C    schedule 28.09.2010