Не удается переопределить кнопку «Назад» на целевой странице Windows Phone 7

Я работаю над приложением для Windows Phone 7, для которого требуется подключение для передачи данных. Если его нет, выдает сообщение об ошибке.

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

Итак, я нашел следующий код, который отлично работает везде, кроме целевой страницы.

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
        {
            e.Cancel = true;
            base.OnBackKeyPress(e);
        }

Событие OnBackKeyPress даже не запускается на целевой странице. Он просто выходит из приложения. Моя целевая страница — это PhoneApplicationPage, как и везде. Я не могу понять, почему это происходит. Любые идеи?


person Neil    schedule 09.01.2011    source источник
comment
Я не могу воссоздать вашу проблему. Если у вас есть точка останова, установленная в строке e.Cancel = true;, она должна сработать. Кроме того, я надеюсь, что приведенный выше код также является примером. Вам нужно будет добавить код, чтобы закрыть всплывающее окно.   -  person Matt Lacey    schedule 10.01.2011
comment
@Matt - Да, приведенный выше код является просто примером. Везде в моем коде срабатывает точка останова. Однако на целевой странице (страница приложения телефона, загруженная в сводной элемент управления) я не могу запустить событие. Он просто выходит из приложения.   -  person Neil    schedule 10.01.2011
comment
@Neil Я до сих пор не могу воссоздать это (только что повторил попытку с помощью Pivot Project). Можете ли вы создать новый минимальный проект, который воссоздает этот и сделает его доступным. Кроме того, вы дважды проверили, что точка останова всегда установлена ​​​​на разрыв, не так ли.   -  person Matt Lacey    schedule 10.01.2011
comment
Вы сказали, что страница phoneapplication загружается в сводную панель управления. ты имеешь в виду, что наоборот? стержень должен быть на странице, а не наоборот. если у вас есть страница внутри сводки (которая на самом деле была бы page-›pivot-›page?), тогда самая внешняя страница получит OnBackKeyPress, а не внутреннюю. Как говорит Мэтт, на данный момент нам нужно увидеть реальный код, чтобы помочь вам в дальнейшем.   -  person John Gardner    schedule 10.01.2011
comment
@Matt - это домашний проект, я выложу немного кода, когда вернусь домой сегодня вечером. @John - да, это страница внутри сводки. По сути, сводное содержимое устанавливается на страницу всякий раз, когда выбрана сводная информация.   -  person Neil    schedule 11.01.2011
comment
@Джон, вот и все! На других страницах, загруженных в сводное управление, я мог переопределить кнопку «Назад», но на целевой странице мне пришлось поместить событие на главную страницу. Вроде бы это должно быть очевидно, но я все время упускал из виду - спасибо! Если вы хотите опубликовать ответ, я отмечу его как принятый.   -  person Neil    schedule 12.01.2011


Ответы (2)


вы сказали

страница приложения телефона загружается в сводной элемент управления

ты имеешь в виду, что наоборот? стержень должен быть на странице, а не наоборот. если у вас есть страница внутри сводной точки (которая на самом деле будет страницей-> сводной-> страницей?), тогда самая внешняя страница получит OnBackKeyPress, а не внутреннюю.

Как говорит Мэтт, на данный момент нам нужно увидеть реальный код, чтобы помочь вам в дальнейшем.

person John Gardner    schedule 12.01.2011

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

person Yousef    schedule 09.01.2011
comment
Вот мой сценарий. При начальной загрузке страницы данные извлекаются из веб-сервиса. Если веб-сервис недоступен, появится сообщение об ошибке. Это происходит на целевой странице. Итак, если я нанесу ответный удар, должно ли оно закрыть сообщение об ошибке, а затем выйти? Или просто выйти? Каким из требований он должен соответствовать? Возможно, мне просто нужно немного изменить архитектуру своего приложения, чтобы избежать этой проблемы. - person Neil; 09.01.2011
comment
Если нет веб-службы, следовательно, приложение бесполезно, нет необходимости в дополнительном шаге. Просто закройте приложение, должно пройти сертификат IMO. - person Lukasz Madon; 09.01.2011
comment
При использовании пользовательского модального диалога я ожидаю, что кнопка «Назад» закроет этот диалог перед закрытием приложения. - person Matt Lacey; 10.01.2011
comment
5.2.4.a политик торговой площадки не отменяет необходимость нажатия кнопки «Назад» для закрытия пользовательских диалогов. Цель этого пункта — гарантировать, что всегда можно выйти из приложения, нажав кнопку «Назад». Пункт предназначен для того, чтобы никто не создавал приложение, которое вы не можете закрыть с помощью кнопки «Назад». - person Matt Lacey; 10.01.2011