我们的代码中有很多地方显示未附加到父级的弹出窗口。换句话说,它是
<svg class="opinionate-action post-agree" version="1.1" viewBox="0 0 14.7 18.4" data-reactid=".0.2.1.0.2.0.$57047af48bd3ef3c0ddf7dd8.$57047af48bd3ef3c0ddf7dd8.0.1.5.1.0.0.0" style="-webkit-user-select: auto;"><g data-reactid=".0.2.1.0.2.0.$57047af48bd3ef3c0ddf7dd8.$57047af48bd3ef3c0ddf7dd8.0.1.5.1.0.0.0.0" style="-webkit-user-select: auto;"><path d="M14.4,12.3c0.2-0.4,0.3-0.9,0.3-1.4c0-0.7-0.3-1.4-0.7-2c0-0.1,0-0.2,0-0.4c0-1.7-1.3-3.2-3-3.3 c0-0.3,0.1-0.7,0.1-1.1c0-2.3-1.7-4-4.1-4c-0.3,0-0.4,0-0.4,0L4.8,0.4v2.9C4.4,4.2,3.5,4.9,3,5.1l0,0C1.3,5.9, 0.1,7.8,0.1,9.9v3.3 v0.1c0,2.8,2.3,5.2,5.2,5.2h5.3c1.8,0,3.2-1.3,3.2-3c0-0.1,0-0.2,0-0.2c0.5-0.5,0.8-1.2, 0.8-2C14.6,12.9,14.5,12.6,14.4,12.3z M12.6,13.2c0,0.6-0.6,1-1.2,1h-0.5c0.4,0.1,1,0.7,1,1.2c0,0.6-0.6,1-1.2, 1H5.3c-1.7,0-3.2-1.4-3.2-3.2V9.9c0-1.2,0.7-2.5,1.8-3 c0.8-0.6,2.5-1.5,2.9-3.4V2.2c0,0,2.4-0.3,2.4,2c0, 2.6-1.6,3-0.3,3.1h2c0.7,0,1.3,0.7,1.3,1.4c0,0.6-0.6,1-1,1.1h0.5 c0.6,0,1.2,0.6,1.2,1.3c0,0.6-0.6,1-1.2, 1h0C12,12.1,12.6,12.6,12.6,13.2z" data-reactid=".0.2.1.0.2.0.$57047af48bd3ef3c0ddf7dd8.$57047af48bd3ef3c0ddf7dd8.0.1.5.1.0.0.0.0.0" style="-webkit-user-select: auto;"></path></g></svg>
同时在屏幕上有2或3个弹出窗口是正常的。是否可以枚举所有当前显示的弹出窗口?使用VisualTreeHelper枚举Window.Current.Content中的所有元素没有帮助。它仅返回逻辑树中的元素。如果弹出窗口放在XAML上,它将出现在结果中。如果它在代码中实例化,则不会。我需要找到所有当前显示的弹出窗口。怎么做?
答案 0 :(得分:0)
Popup
并未将儿童置于其中。 Popup
的孩子托管在PopupRoot
内。您可以在Live Visual Tree
。
您可以看到以下代码:
TextBlock text = new TextBlock();
text.Text = "Hello";
TextBlock text2 = new TextBlock();
text2.Text = "Hello world";
var objPopup = new Popup()
{
Child = text,
IsOpen = true
};
var objPopup2 = new Popup()
{
Child = text2,
IsOpen = true
};
从图片中,您可以看到Button
中的RootScrollViewer
,Popup
的孩子会在PopupRoot
时显示Popup
显示。
如果您想要枚举所有当前显示的弹出窗口,可以将Popup
添加到集合中。您可以使用foreach
获取所有Popup
,然后可以使用Popup.IsOpen
来了解是否显示弹出窗口。
例如:
public ObservableCollection<Popup> popups;
public MainPage()
{
this.InitializeComponent();
TextBlock text = new TextBlock();
text.Text = "Hello";
TextBlock text2 = new TextBlock();
text2.Text = "Hello world";
var objPopup = new Popup()
{
Child = text,
IsOpen = true
};
var objPopup2 = new Popup()
{
Child = text2,
IsOpen = true
};
objPopup.HorizontalOffset = 100;
objPopup2.HorizontalOffset = 600;
popups = new ObservableCollection<Popup>();
popups.Add(objPopup);
popups.Add(objPopup);
foreach (var item in popups)
{
if (item.IsOpen == false)
{
item.IsOpen = true;
}
}
}
答案 1 :(得分:0)
您可以使用VisualTreeHelper
类,特别是GetOpenPopups
方法。
使用它应该很容易。尝试这样的事情:
var listOfOpenPopups = VisualTreeHelper.GetOpenPopups(Window.Current);