如何检查是否有任何ContentDialog处于打开状态?

6

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

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

注意:

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

13

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.
   }
}

4

对目标 Windows 10 版本 18362 进行了测试并接受了 Vignesh 的答案,发现 ContentDialog 永远不会成为 popup 的子级。在我的情况下,简单检查计数最有效:

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

如果在这种方法中存在任何问题,请随时评论。谢谢。


当 MenuFlyout 被打开时,这将返回 true。 - Charles Milette

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接