2009-05-04 9 views

Odpowiedz

31

Można użyć metody FindName() klasy ControlTemplate.

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

To było zwracanie wyjątku zerowego dla mnie, wtedy uświadomiłem sobie coś podczas wypróbowywania różnych odpowiedzi tutaj na SO: użyj odpowiedzi CSharper, jeśli szablon, którego szukasz - jest zastosowany na myButton1_. Ale jeśli myButton1 jest tylko członkiem tego szablonu, użyj '(Grid) myButton1.FindName (" grid ");' zamiast tego (przydatne w procedurach obsługi przycisków). – Naucle

4

Nie jestem pewien, o co prosisz, więc postaram się odpowiedzieć na oba wystąpienia, które interpretuję jako Twoje pytanie.

1) Jeśli chcesz zadeklarować wyraźnego sterowania, a następnie edytować je bezpośrednio, wszystko co musisz zrobić, to ustawić właściwość name jak takie:

<Canvas x:Name="myCanvas"/> 

Następnie można uzyskać dostęp do obszaru roboczego poprzez Imię jako takie:

myCanvas.Background = Brushes.Blue; 

2) Jeśli szukasz zadeklarować kontrolę rodzajowe, a następnie używać go wiele razy, można zrobić to tak:

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

Następnie można uzyskać dostęp do predefiniowanych kontrolę przy użyciu tej składni w kodzie:

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

Jeśli chcesz użyć resourse jako szablon do wielokrotnych kontroli, dodać X: Shared = „false”.

+0

FindName() zwracał wartość null. FindResource() działało dla mojej aplikacji. Dzięki. – JohnForDummies