Come accedere a un controllo WPF situato in un ControlTemplate?
-
03-07-2019 - |
Domanda
Di solito, i controlli WPF sono dichiarati nei file .xaml e non nel codice dietro (file .xaml.cs). Tuttavia, a volte ho bisogno di usare alcuni di questi controlli nel codice per manipolarli. Come posso ottenere la gestione di tale controllo se "risiede"? nel file xaml?
Soluzione
È possibile utilizzare il metodo FindName () della classe ControlTemplate.
// Finding the grid that is generated by the ControlTemplate of the Button
Grid gridInTemplate = (Grid)myButton1.Template.FindName("grid", myButton1);
Altri suggerimenti
Non sono sicuro di ciò che stai chiedendo, quindi cercherò di rispondere ad entrambi i casi che sto interpretando come tua domanda.
1) Se si desidera dichiarare un controllo esplicito e quindi modificarlo direttamente, è sufficiente impostare la proprietà name in questo modo:
<Canvas x:Name="myCanvas"/>
È quindi possibile accedere all'area di disegno tramite il Nome in quanto tale:
myCanvas.Background = Brushes.Blue;
2) Se stai cercando di dichiarare un controllo generico e quindi utilizzarlo più volte, puoi farlo in questo modo:
<Window>
<Window.Resources>
<Ellipse x:Key="myEllipse" Height="10" Width="10">
</Window.Resources>
</Window>
Puoi quindi accedere a quel controllo predefinito usando questa sintassi nel codice:
Ellipse tempEllipse = (Ellipse)FindResource("MyEllipse");
Se si desidera utilizzare Resourse come modello per più controlli, aggiungere x: Shared = " false " ;.