7

В Windows Phone 8.0, я использовал это, чтобы обрабатывать кнопку назад:Что эквивалентно «OnBackKeyPress»

protected override void OnBackKeyPress(CancelEventArgs e) 
{ 
    base.OnBackKeyPress(e);   
} 

Это событие не существует на «странице» контроля. Как я могу обработать щелчок по кнопке «Назад» в WP 8.1?

ответ

3

Посмотрите на Windows.Phone.UI.Input.HardwareButtons.

Если вы добавите основную страницу в свой проект, тогда VS добавит в ваш проект класс NavigationHelper, который поможет вам в навигации по вашему приложению, вы также можете увидеть в исходном коде, что он подписывается на Windows.Phone.UI.Input.HardwareButtons.BackPressed.


В случае, если вы хотите продлить обработки кнопки Назад (управление очередью EventHandler и так далее) вы можете посмотреть at this answer - метод будет способствовать предотвращению обратной навигации (если она не нужна) и добавьте еще несколько вариантов поведения.

+0

это Имеет ли значение, что т он утверждает, что «этот API поддерживается только в собственных приложениях» –

+0

Спасибо за этот намек. – Roman

+0

@ Roman Я добавил ссылку на другой ответ, который может вас заинтересовать, - помогает обрабатывать BackButton, предотвращать навигацию и многое другое. – Romasz

2

Вы можете использовать Windows.Phone.UI.Input.HardwareButtons как вышеприведенный комментарий. Но это событие всегда бросается на каждую страницу. Таким образом, вы можете использовать, как показано ниже, и это только вызывается на активной странице.


protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed; 
} 

void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e) 
{ 
    e.Handled = true; 
    Windows.Phone.UI.Input.HardwareButtons.BackPressed -= HardwareButtons_BackPressed; 
    // Navigate to a page 
} 

Я решаю свою проблему таким образом.

+0

Не поддерживается в универсальных приложениях Windows – Nanoc

+0

Это работало для меня в универсальном приложении. Мне нужно было, однако, вложить его в операторы #if WINDOWS_PHONE_APP. – Yosem

+0

Не следует ли удалять событие HardwareButtons_BackPressed в OnNavigatedFrom? – Elektropepi

1

Im мигрирующие мой КР8 proyect к wp8.1 универсальна, так, чтобы не задеть слишком много моего кода я делаю:

В моей странице базового класса в конструкторе, я добавил:

public VBasePage() 
    { 
     Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed; 
    } 

И потом:

private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e) 
    { 
     var args = new CancelEventArgs(); 
     OnBackKeyPress(args); 
     if (args.Cancel) 
     { 
      e.Handled = true; 
     } 
    } 
protected virtual void OnBackKeyPress(CancelEventArgs e) 
    { 
    } 

Так что я могу использовать свои текущие переопределения для метода OnBackKeyPress

Смежные вопросы