2011-01-24 41 views
5

Aşağıdaki gibi GetTemplateChild kullanıyorum, ancak her zaman NULL döndürür. Bunu nasıl düzeltebilirim?GetTemplateChild her zaman döndürür

[TemplatePart(Name = "textPoints", Type = typeof(TextBlock))] 
textPoints = (TextBlock)GetTemplateChild("TextBlock"); 
+0

Buna bir çözüm buldunuz mu? _Reed Copsey_'ın yanıtı, sağladığınız bilgiler için doğrudur, ancak eğer hala çalışmıyorsa, kontrol şablonunuzu hata içerebileceğinden dolayı gönderebilirsiniz. –

+1

Benim durumumda, FrameworkElement.OnApplyTemplate() 'çağrılmadan önce FrameworkElement.GetTemplateChild()' yi çağırmak güvenli değildir. Denetimi alt sınıflara ayırmayı ve 'OnApplyTemplate()' işlevini geçersiz kılmayı deneyin. – kevinarpe

cevap

4

GetTemplateChild bir parametre değil, tip olarak adını sürer. XAML olarak tanımlanır beri:

<TextBlock Text="{Binding}" Foreground="Cyan" 
    x:Name="textPoints" 

almak için adı olarak "TextBlock" yerine "textPoints" geçen deneyin: nereye gelen diğer bazı kontrolün şablon çocuğu almaya çalışırken gibi

[TemplatePart(Name = "textPoints", Type = typeof(TextBlock))] 
textPoints = (TextBlock)GetTemplateChild("textPoints"); 
+0

Thnaks, aşağıdaki kodla denedim, hala aynı sonucu alıyorum (yani, NULL) textPoints = (TextBlock) GetTemplateChild ("textPoints"); Bazı inceliklerini özlüyorum mu? – codematrix

+0

Hayır, Aşağıdaki yöntemde, public override void OnApplyTemplate(). Diğer GetTemplateChilds çalışıyor. Sadece bu TextBlock için sorunum var. Bu parçası. GetTemplateChild() bu durumda çalışır mı? – codematrix

2

görünüyor GetTemplateChild'i mi arıyorlar?

ItemsControl'niz bazı UserControl'ün içinde bulunuyorsa, GetTemplateChild, UserControl'ünüzün çocukları şablonun bir parçası olmadıkça çalışmayacaktır ve her çocuğun şablon çocuğunu yinelemeli olarak aramayacaktır.

Genellikle GetTemplateChild, Özel Denetimlerde kullanılır.

+0

Yukarıdaki koda bakın, x için çalışır: Name = "PointsList", ancak x değil: Name = "textPoints". Biraz ışık atabilir misin? GetTemplateChild() bu durumda çalışır mı? – codematrix

+0

Hayır, işe yaramaz, çünkü GetTemplateChild sadece geçerli şablonda adlandırılmış bir çocuğa bakar, metin kutunuzun içinde currny yoktur Şablon şablon şablonunun içinde yer alır. ItemsControl'den türetilen başka bir özel denetim oluşturmanız gerekecektir, ancak eğer kontrolünüz öğe kalıbının içinde ise, ayrı ayrı kontrol olarak madde konteynerini de oluşturmanız gerekecektir. –

+0

Şablon çocuğu, geçerli kontrol için özel bir öğedir, yalnızca ebeveyn sahibi şablon şablon çocuğa erişebilir, ancak VisualTree'de gezinebilir ve her yere çocuk denetimlerine ulaşabilirsiniz. Ayrıca ItemsControl her öğe için aynı ada sahip çok sayıda kontrole sahip olacak, bu yüzden GetTemplateChild hangi öğeyi döndürecek? –

İlgili konular