¿Cómo acceder a un control WPF ubicado en una ControlTemplate?
-
03-07-2019 - |
Pregunta
Por lo general, los controles WPF se declaran en los archivos .xaml y no en el código subyacente (archivos .xaml.cs). Sin embargo, a veces necesito usar algunos de esos controles en el código que está detrás para poder manipularlos. ¿Cómo puedo obtener el controlador de dicho control si " reside " en el archivo xaml?
Solución
Puedes usar el método FindName () de la clase ControlTemplate.
// Finding the grid that is generated by the ControlTemplate of the Button
Grid gridInTemplate = (Grid)myButton1.Template.FindName("grid", myButton1);
Otros consejos
No estoy seguro de lo que estás preguntando, así que intentaré responder las dos instancias que estoy interpretando como tu pregunta.
1) Si desea declarar un control explícito y luego editarlo directamente, todo lo que tiene que hacer es establecer la propiedad del nombre como tal:
<Canvas x:Name="myCanvas"/>
A continuación, puede acceder al lienzo a través del Nombre como tal:
myCanvas.Background = Brushes.Blue;
2) Si desea declarar un control genérico y luego usarlo varias veces, puede hacerlo de la siguiente manera:
<Window>
<Window.Resources>
<Ellipse x:Key="myEllipse" Height="10" Width="10">
</Window.Resources>
</Window>
Luego puedes acceder a ese control predefinido usando esta sintaxis en el código:
Ellipse tempEllipse = (Ellipse)FindResource("MyEllipse");
Si desea usar el Resourse como plantilla para varios controles, agregue x: Shared = " false " ;.