ContentDialog исчезает при нажатии Escape

2

Поэтому я использую: public sealed partial class SynchronizationDialog: ContentDialog.

У меня есть приложение UWP. Когда я нажимаю кнопку в приложении UWP, открывается SynchronizationDialog и приложение начинает загружать документы. Прогресс можно увидеть в диалоге.

После завершения загрузки диалоговое окно закрывается с помощью this.Hide();

Теперь моя проблема в том, что когда я нажимаю Escape -key, диалог исчезает. Тем не менее, загрузка все еще идет, и все работает просто отлично.

Как я могу предотвратить исчезновение Диалога? Я попробовал это:

public SynchronizationDialog()
{
    this.InitializeComponent();
    this.Loaded += SynchronizationDialog_Loaded;

    this.Closing += ContentDialog_Closing; //this is what I tried
}

//....

void ContentDialog_Closing(ContentDialog sender, ContentDialogClosingEventArgs args)
{
    bool doNotClose = true;
    if (doNotClose)
    {
        args.Cancel = true;
    }
}

Диалог не исчезает таким образом. Но после того, как загрузка закончена и это this.Hide(); бывает диалог не скрывается. Я также не могу отменить диалог, поэтому он остается там до перезапуска приложения.

Теги:
uwp
dialog

1 ответ

2
Лучший ответ

Я бы создал новый логический флаг, который бы указывал, выполняется ли синхронизация, и пользовательский метод, который пометит его как false а затем перейдет к Hide:

private bool _workInProgress = true;

public void FinishWork()
{
   _workInProgress = false;
   this.Hide();
}

Теперь обработчик события Closing будет обновлен до следующего:

void ContentDialog_Closing(ContentDialog sender, ContentDialogClosingEventArgs args)
{
    args.Cancel = _workInProgress;     
}

Теперь вместо Hide используйте метод FinishWork когда синхронизация завершена.

  • 0
    ооо. это классно. это сработало. Благодарю. Я правильно понимаю? с помощью this.hide () происходит событие ContentDialogClosingEventArgs?
  • 1
    Да, но основная хитрость заключается в том, что мы устанавливаем args.Cancel в _workInProgress который имеет значение true во время синхронизации, но мы устанавливаем его в false в FinishWork что означает, что args.Cancel не будет установлен, и закрытие диалога будет продолжено

Ещё вопросы

Сообщество Overcoder
Наверх
Меню