2009-05-04 14 views
22

Genellikle WPF denetimleri, .xaml dosyalarında bildirilir ve arkasındaki kodda (.xaml.cs dosyaları) belirtilmez. Ancak, bazen bu kodların bazılarını bunları işlemek için kod arkasında kullanmam gerekir. Xaml dosyasında "yer alıyorsa" böyle bir denetimin tanıtıcısını nasıl alabilirim?ControlTemplate'de bulunan WPF kontrolüne nasıl erişilir?

cevap

31

ControlTemplate sınıfının FindName() yöntemini kullanabilirsiniz.

// Finding the grid that is generated by the ControlTemplate of the Button 
Grid gridInTemplate = (Grid)myButton1.Template.FindName("grid", myButton1); 
+0

Bu benim için boş bir istisna döndürüyordu, o zaman burada SO üzerinde bazı farklı yanıtları denerken bir şey farkettim: _Beniston.tr'da uygulandığınız şablon varsa, CSharper'ın yanıtını kullanın. Ama eğer myButton1 sadece söz konusu şablonun bir üyesi ise, '(Grid) myButton1.FindName (" grid ");' yerine (düğme işleyicilerinde kullanışlıdır) kullanın. – Naucle

4

Sorduğun şeyden emin değilim, bu yüzden soru olarak yorumladığım her iki örneği de yanıtlamaya çalışacağım. Eğer açık bir denetim beyan ve sonra doğrudan düzenlemek istiyorsanız

1) , yapmanız gereken tek şey bu tür benzeri ad özelliğini ayarlanır:

<Canvas x:Name="myCanvas"/> 

Ardından aracılığıyla tuval erişebilir gibi isim: Eğer birden çok kez genel kontrol beyan ve sonra kullanmak arıyorsanız

myCanvas.Background = Brushes.Blue; 

2) , bunu şöyle yapabilirsiniz:

Birden kontroller için bir şablon olarak Resourse kullanmak x eklemek istiyorsanız

Ellipse tempEllipse = (Ellipse)FindResource("MyEllipse"); 

: Paylaşılan = "false" 210

<Window> 
    <Window.Resources> 
     <Ellipse x:Key="myEllipse" Height="10" Width="10"> 
    </Window.Resources> 
</Window> 

Sonra kodunda bu sözdizimini kullanarak bu önceden tanımlanmış kontrolünü erişebilir.

+0

FindName() boş bırakmaya devam etti. Uygulamam için FindResource() çalıştı. Teşekkürler. – JohnForDummies

İlgili konular