2010-11-12 17 views

cevap

26

Sen kontrolleri ağacını taramasını VisualTreeHelper statik sınıfını kullanabilirsiniz. Bu (özür ben VB dyslexic))

T FindFirstChild<T>(FrameworkElement element) where T: FrameworkElement 
    { 
     int childrenCount = VisualTreeHelper.GetChildrenCount(element); 
     var children = new FrameworkElement[childrenCount]; 

     for (int i = 0; i < childrenCount; i++) 
     { 
      var child = VisualTreeHelper.GetChild(element, i) as FrameworkElement; 
      children[i] = child; 
      if (child is T) 
       return (T)child; 
     } 

     for (int i = 0; i < childrenCount; i++) 
      if (children[i] != null) 
      { 
       var subChild = FindFirstChild<T>(children[i]); 
       if (subChild != null) 
        return subChild; 
      } 

     return null; 
    } 
+3

Bu, çoğu Framework elememnts için çalışır, ancak ContentPresenter –

+2

@John: sounds strange ile benim için çalışmaz. Peki sorun tam olarak nedir? ContentPresenter'ı ağaçta bulamıyor veya ContentPresenter'ın çocuğunu bulamıyor musunuz? Görsel ağacı ararken henüz oluşturulmamış olabilir mi? –

+2

@ Alfa-fare: Anladın! Listeye bir eleman ekledim ve hemen kontrollerinden birine odaklanmaya çalışıyorum. Odaklama işlemini arka plan önceliğine göre planlamak için dağıtıcıyı kullanmak sorunu çözdü. –

3
Dim myContentPresenter = CType(obj, ContentPresenter) 
Dim myDataTemplate = myContentPresenter.ContentTemplate 
Dim target = CType(myDataTemplate.FindName("txtQuantity", myContentPresenter), TextBox) 
3

ContentPresenter tek çocuğu vardır o C# gerçekleştirilebilir nasıl. daha derine gitmek gerekirse basitçe

VisualTreeHelper.GetChild(yourContentPresenterObj, 0); 

tarafından çocuk olsun - aşağı bir ilk TextBox, o zaman, evet, @ alfa-fare tarafından önerilen daha kapsamlı bir yaklaşım kullanmak bulundu.

İlgili konular