2016-04-06 4 views
0

Es gibt viele Stellen in unserem Code, an denen Popup-Fenster angezeigt werden, die nicht an ein Elternteil angefügt sind. Mit anderen Worten ist esWie alle Popup-Fenster aufgelistet werden?

var objPopup = new Popup() { 
    Child = objControl, 
    IsOpen = true 
}; 

Es ist normal, 2 oder 3 Popups gleichzeitig auf dem Bildschirm zu haben. Ist es möglich, alle aktuell angezeigten Popups aufzuzählen? Das Auflisten aller Elemente von Window.Current.Content mit VisualTreeHelper hilft nicht. Es gibt nur Elemente zurück, die sich im logischen Baum befinden. Wenn ein Popup auf einem XAML platziert wird, wird es im Ergebnis angezeigt. Wenn es in dem Code instanziiert wird, wird es nicht. Ich muss alle aktuell angezeigten Popups finden. Wie es geht?

Antwort

0

Die Popup beherbergt das Child nicht in sich. Die Kinder der Popup sind gehostet innerhalb PopupRoot. Sie können es in der Live Visual Tree sehen.

Sie können den folgenden Code sehen:

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

enter image description here

Aus dem Bild können Sie sehen die Button im RootScrollViewer und die Kinder der Popup im PopupRoot zeigen, wenn die Popup wird angezeigt.

Wenn Sie alle aktuell angezeigten Popups aufzuzählen, wie dieses Problem zu umgehen Sie Popup zum collection.That hinzufügen können Sie foreach bekommen alle die Popup verwenden können, dann können Sie die Popup.IsOpen nutzen zu wissen, ob die Pop-ups angezeigt werden .

Zum Beispiel:

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; 
     } 
    } 
} 
0

können Sie verwenden, um die VisualTreeHelper Klasse, speziell die GetOpenPopups Methode.

Verwenden sollte es ziemlich einfach sein. Versuchen Sie etwas wie dieses:

var listOfOpenPopups = VisualTreeHelper.GetOpenPopups(Window.Current);