2009-10-05 10 views
7

Tengo un control de usuario que aplica un estilo a un botón, con el estilo que contiene una sección ControlTemplate. Dentro de ControlTemplate, hay varios elementos de UI, como una Elipse y una Ruta.WPF configuró elementos de estilo con nombre del código?

Si le doy esos elementos, el Elipse y el Camino, un nombre con x: Nombre, ¿puedo acceder a ellos desde el código?

Parece que el Elipse y la Ruta del estilo no están visibles porque me da un error de compilación (C#).

¿Voy por esto de la manera incorrecta?

Respuesta

18

Dado que una plantilla se puede instanciar varias veces, no es posible enlazar un miembro generado a través del x:Name. En su lugar, debe encontrar el elemento nombrado dentro de la plantilla aplicada a un control.

Dada XAML simplificado:

<ControlTemplate x:Key="MyTemplate"> 
    <Ellipse x:Name="MyEllipse" /> 
</ControlTemplate> 

Usted podría hacer algo como esto:

var template = (ControlTemplate)FindResource("MyTemplate"); 

template.FindName("MyEllipse", myControl); 

O aún más simple:

var ellipse = (Ellipse)myControl.Template.FindName("MyEllipse", myControl); 

Usted puede leer sobre FrameworkTemplate.FindName.

Algunos ejemplos y discusión here, here y here.

+0

Perfecto, muchas gracias! – MattJ

+11

Si es perfecto, márcalo como la respuesta. – Vaccano

Cuestiones relacionadas