2016-04-06 34 views
0

Kodumuzda, ebeveynlere bağlı olmayan açılır pencereleri gösterdiğimiz birçok yer var. Başka bir deyişle, ekranda aynı anda 2 veya 3 popup olması normaldir. Şu anda görüntülenen tüm pop-up'ları sıralamak mümkün mü? VisualTreeHelper kullanarak Window.Current.Content gelen tüm öğeleri numaralandırma yardımcı olmuyor. Sadece mantıksal ağaçta olan elementleri döndürür. Bir XAML'ye bir pop-up yerleştirilirse sonuçta olacaktır. Kodda başlatılırsa olmaz. Şu anda görüntülenen tüm popup'ları bulmam gerekiyor. Nasıl yapılır?Tüm Popup pencereleri nasıl numaralandırılır?

cevap

0

Popup, Çocuğun kendi içinde barındırılamaz. Popup'un Çocukları, PopupRoot içinde barındırılmaktadır. Bunu Live Visual Tree'da görebilirsiniz.

Aşağıdaki kodu görebilirsiniz: resimden

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

, sen ButtonRootScrollViewer olduğunu ve Popup çocukları PopupRootPopup gösterileceği görebilirsiniz görüntülenir.

Eğer pop-up görüntülenir eğer sen Popup tüm almak için foreach kullanabilirsiniz collection.That için Popup ekleyebilir geçici bir çözüm olarak, o zaman bilmek Popup.IsOpen kullanabilirsiniz tüm anda görüntülenen pop-up numaralandırmak isterseniz . Örneğin

:

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

Sen VisualTreeHelper sınıfını, özellikle GetOpenPopups yöntemi kullanabilirsiniz.

Kullanımı oldukça kolay olmalı. Şunun gibi bir şey deneyin:

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