如何检查任何ContentDialog是否打开?

时间:2019-01-01 14:04:40

标签: c# uwp

因此我们一次只能打开一个内容对话框。这可以。但是在我的应用程序中,可以打开几个可能的内容对话框,我想避免创建自己的变量,因为我会忘记将其添加到某处,并且整个应用程序都会崩溃(因为尝试打开第二个内容对话框会引发异常)

所以我的问题是:如何检查任何 ContentDialog是否打开?

注意:

  1. 我不想检查特定的ContentDialog。
  2. 我想避免创建自己的变量。

2 个答案:

答案 0 :(得分:5)

ContentDialog显示在PopupRoot中,因此使用VisualTreeHelper.GetOpenPopups()将帮助您获取它。

var openedpopups = VisualTreeHelper.GetOpenPopups(Window.Current);
foreach (var popup in openedpopups)
{
   if(popup.Child is ContentDialog)
   {
      //some content dialog is open.
   }
}

答案 1 :(得分:3)

在目标Windows 10版本18362上经过测试的(由Vignesh接受的)答案,发现ContentDialog决不是弹出窗口的子级。就我而言,简单的计数检查最有效:

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

如果此方法有任何问题,请随时发表评论。谢谢。