Проблемы BackButtonPressed в Windows Phone 8.1?

У меня есть всплывающее окно в моем приложении среды выполнения Windows Phone 8.1.

Пока нажата кнопка «Назад» и на странице открыто всплывающее окно, приложение должно оставаться на самой странице, иначе оно должно вернуться. Это моя концепция. Итак, я закодировал, как показано ниже:

    void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
    {
        if (PopupWindow.IsOpen)
        {
            PopupWindow.IsOpen = false;
            e.Handled = true;
        }
    }

Даже если на странице открыты всплывающие окна, приложение переходит на предыдущую страницу. Я использовал ту же логику в приложении Silverlight для Windows Phone, и это сработало.

ПРИМЕЧАНИЕ. Я использую Basic Page.

Какую ошибку на самом деле я делаю?


person user3701923    schedule 06.06.2014    source источник
comment
Это выглядит идеально. Что не работает? Ваше приложение закрывается? Вам нужна else в этой логике?   -  person Jerry Nixon    schedule 06.06.2014


Ответы (2)


Проверьте две вещи:

  • по умолчанию в NavigationHelper, HardwareButtons_BackPressed отсутствует проверка того, было ли событие уже обработано, попробуйте улучшить его:

    private void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
    {
        // if (this.GoBackCommand.CanExecute(null)) // this is as a default
        if (this.GoBackCommand.CanExecute(null) && !e.Handled) //  add a check-up
        // ... rest of the code
    
  • посмотрите на свой файл App.xaml.cs, и в App() есть HardwareButtons_BackPressed с подпиской (проверьте, если метод с подпиской также переходит назад):

    public App()
    {
        this.InitializeComponent();
        this.Suspending += OnSuspending;
        //  HardwareButtons.BackPressed += HardwareButtons_BackPressed; // this line also could fire Frame.GoBack() (as default project template)
        // of course check what is in the above method
    }
    

Также помните, что события запускаются в том порядке, в котором вы на них подписались, и, например, помощник навигации подписывается на событие Loaded. Если вы подпишетесь позже, то навигация будет первой. Вы можете подписаться раньше или использовать флаг.

person Romasz    schedule 06.06.2014

Я решаю таким образом

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

    protected virtual void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
    {
        e.Handled = true;
    }
person lucaT    schedule 05.07.2014