Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to check if ANY ContentDialog is open?

Tags:

c#

uwp

So we can only have one opened content dialog at a time. This is fine. But in my app there are several possible content dialogs that can be opened, and I would like to avoid making my own variable because I can forget to add it somewhere and the whole app will crash (because trying to open second content dialog throws exception).

So my question is: How to check if any ContentDialog is open?

Note:

  1. I don't want to check for specific ContentDialog.
  2. I would like to avoid creating my own variables.
like image 706
Mailosz Avatar asked Jan 01 '19 14:01

Mailosz


2 Answers

ContentDialog is shown in the PopupRoot so using VisualTreeHelper.GetOpenPopups() will help you get it.

var openedpopups = VisualTreeHelper.GetOpenPopups(Window.Current);
foreach (var popup in openedpopups)
{
   if(popup.Child is ContentDialog)
   {
      //some content dialog is open.
   }
}
like image 122
Vignesh Avatar answered Oct 03 '22 16:10

Vignesh


Tested accepted answer (by Vignesh) on target Windows 10 build 18362 and find that ContentDialog is never a child of popup. In my case simple check of the count works best:

    protected bool IsAnyContentDialogOpen()
    {
        return VisualTreeHelper.GetOpenPopups(Window.Current).Count > 0;
    }

Please feel free to comment if there's any problems with this approach. Thanks.

like image 30
Mike Keskinov Avatar answered Oct 03 '22 16:10

Mike Keskinov