Как отменить задание?

c# windows windows-phone-8.1 uwp

79 просмотра

1 ответ

Я перезаписываю BackButton в своем приложении и показываю MessageDialog.

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


private async void HardwareButtons_BackPresseed(object sender, BackPressedEventArgs e)
    {
        e.Handled = true;
        var dialog = new MessageDialog("Do you want exit?");

        dialog.Commands.Add(new Windows.UI.Popups.UICommand("yes") { Id = 0 });
        dialog.Commands.Add(new Windows.UI.Popups.UICommand("no") { Id = 1 });

        dialog.DefaultCommandIndex = 0;
        dialog.CancelCommandIndex = 1;

        var result = await dialog.ShowAsync();

        if (result.Label == "yes")
        {
            this.Frame.Navigate(typeof(BlankPage1));

            ((Frame)Window.Current.Content).BackStack.Clear();
        }

введите описание изображения здесь

После перехода к BlankPage1 я снова вижу MessageDialog, если нажать на кнопку BackButton. Как я могу отменить это переопределение после навигации?

Автор: Даниил Белов Источник Размещён: 08.11.2019 11:01

Ответы (1)


1 плюс

Судя по вашему ответу на мой комментарий, вы просто забыли отказаться от подписки на BackPressedсобытие, когда уходите со страницы. Это гарантирует, что обработчик событий вызывается только тогда, когда вы хотите.

Например:

private async void HardwareButtons_BackPresseed(object sender, BackPressedEventArgs e)
{
    e.Handled = true;
    var dialog = new MessageDialog("Do you want exit?");

    dialog.Commands.Add(new Windows.UI.Popups.UICommand("yes") { Id = 0 });
    dialog.Commands.Add(new Windows.UI.Popups.UICommand("no") { Id = 1 });

    dialog.DefaultCommandIndex = 0;
    dialog.CancelCommandIndex = 1;

    var result = await dialog.ShowAsync();

    if (result.Label == "yes")
    {
        // Leaving this page. Stop listening for Back button presses.
        Windows.Phone.UI.Input.HardwareButtons.BackPressed -= HardwareButtons_BackPressed;

        this.Frame.Navigate(typeof(BlankPage1));

        ((Frame)Window.Current.Content).BackStack.Clear();
    }
Автор: Peter Duniho Размещён: 20.08.2016 03:17
Вопросы из категории :
32x32