2011-02-15 14 views
7

Tamam, bir ana özellik vardır UIElement doğrudan alt sınıf olduğunu FrameworkElement, biliyorum, ama Paneller tip UIElement çocuk sahibi değil FrameworkElement görünüyor (Çocuk tip UIElementCollection taşımaktadır) Eğer UIElement s doğrudan ekleyebilirsiniz anlamına gelecektir Panel'e.UIElement'in ebeveyini nasıl alabilirsiniz?

Bu, eğer bir UIElement varsa ve bir üst panelin bir panel olup olmadığını görmek istiyorsanız, bunun nasıl test edileceğini bildiğim tek yol VisualTreeHelper ile, ancak görsel ağaç değil, mantıksal ağaçtır. (En azından bir panelin bir şablonunun olmadığını biliyoruz, belki de bu yoldur, ama hala ...)

VisualTreeHelper'dan ayrılanlar, UIElement'un hangi panelinin hangi panelde olduğunu bilen var mı? (... ve neden sadece FrameworkElement yerine bir Üst özellik tanımlamamışlar diye bir fikriniz var mı?)

Teşekkürler!

cevap

6

Mantıksal bir üst öğe bulmanız gerekiyorsa LogicalTreeHelper'u VisualTreeHelper ile aynı şekilde kullanabilirsiniz.

"... ve neden FrameworkElement yerine sadece bir Parent özelliğini tanımlayamadıklarına dair herhangi bir fikriniz var mı?" Temel olarak, "Mantıksal Ağaç" kavramı FrameworkElement seviyesinde tanıtılmıştır. FrameworkElement'un UIElement'a ne eklediğine ilişkin ayrıntılar için bkz. http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.aspx (bkz. Açıklamalar). İşte Mantıksal Ağaçlar için söyledikleridir:

mantıksal ağacı: genel WPF programlama modeli genellikle unsurların bir ağaç olma açısından ifade edilir. öğelerinin ağacını mantıksal bir ağaç olarak ifade etmek için destek ve işaretlemeli ağacın FrameworkElement düzeyinde uygulandığını tanımlamak için destekle birlikte . Ancak, FrameworkElement öğesinin kasıtlı olarak 'un bir içerik modeli tanımladığını ve türetme sorumluluğunun türetilmiş sınıflarına ayrıldığını unutmayın. Daha fazla bilgi için bkz. Trees in WPF.

+0

Farkı biliyorum. fiziksel ağaç ve mantıksal ağaç arasında. Sorduğum bu değildi. Tuval, Görsel Ağacın bir parçası olabileceğinden, LogicalTreeHelper'ı burada da kullanamam. Bununla birlikte, ebeveyn ile ilgili noktanızı görüyorum. Benim argümanım o zaman neden ayrı bir VisualParent oluşturmayacak? Aşağıya inanıyorum, ana paneli almak için VisualTreeHelper (ve kolaylık için birleştirilmiş bir yöntem) kullanmaktan başka seçeneğim yok. Ve teknik olarak cevap olmasa da, onu zaten böyle işaretliyorum çünkü bir tane gibi görünmüyor. – MarqueIV

İlgili konular