因此,我们一次只能打开一个内容对话框。这很好。但在我的应用程序中,有几个可能打开的内容对话框,并且我想避免创建自己的变量,因为我可能会忘记在某个地方添加它,整个应用程序就会崩溃(因为尝试打开第二个内容对话框会引发异常)。
所以我的问题是:如何检查是否打开了任何ContentDialog?
注意:
- 我不想检查特定的ContentDialog。
- 我想避免创建自己的变量。
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.
}
}
对目标 Windows 10 版本 18362 进行了测试并接受了 Vignesh 的答案,发现 ContentDialog
永远不会成为 popup
的子级。在我的情况下,简单检查计数最有效:
protected bool IsAnyContentDialogOpen()
{
return VisualTreeHelper.GetOpenPopups(Window.Current).Count > 0;
}
如果在这种方法中存在任何问题,请随时评论。谢谢。