2009-05-04 27 views
22

Normalmente, los controles de 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 para manipularlos. ¿Cómo puedo obtener el control de dicho control si "reside" en el archivo xaml?¿Cómo acceder a un control WPF ubicado en ControlTemplate?

Respuesta

31

Puede utilizar 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); 
+0

Esto me devolvió una excepción nula, luego me di cuenta de algo al intentar algunas respuestas diferentes aquí en SO: use la respuesta de CSharper si la plantilla que está buscando _se aplica en myButton1_. Pero si myButton1 es solo un miembro de dicha plantilla, use '(Grid) myButton1.FindName (" grid ");' en su lugar (útil en los manejadores de botones). – Naucle

4

No estoy seguro de lo que estás preguntando, así que intentaré responder a 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 nombre como por ejemplo:

<Canvas x:Name="myCanvas"/> 

A continuación, puede acceder a la tela a través de la nombrar como tal:

myCanvas.Background = Brushes.Blue; 

2) Si usted está mirando para declarar un control genérico y, a continuación, utilizarlo varias veces, puede hacerlo de esta manera:

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

continuación, puede acceder a ese control predefinida con esta sintaxis en código:

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

Si desea utilizar el Resourse como plantilla para varios controles, añadir x: Compartido = "falso".

+0

FindName() sigue devolviendo nulo. FindResource() funcionó para mi aplicación. Gracias. – JohnForDummies

Cuestiones relacionadas