Crear una plantilla en codebehind no es una buena idea, en teoría, uno haría esto definiendo el ControlTemplate.VisualTree
que es un FrameworkElementFactory
.
ControlTemplate template = new ControlTemplate(typeof(Button));
var image = new FrameworkElementFactory(typeof(Image));
template.VisualTree = image;
Asignación de propiedades es muy indirecta ya que se necesita para usar SetValue
y SetBinding
:
image.SetValue(Image.SourceProperty, ...);
Además, sobre la respuesta aceptada (anteriormente) y el material citado:
Ajuste de la ControlTemplate programáticamente es como usar XAML porque tenemos que usar el X clase amlReader
Esta afirmación es simplemente incorrecto, no qué "tenemos que".
Si asigno las plantillas en tiempo de ejecución, las defino como un recurso que puedo cargar si lo necesito.
Editar: Según la documentación FrameworkElementFactory
se desuso:
Esta clase es una forma obsoleta para crear mediante programación de plantillas, que son subclases de FrameworkTemplate tales como ControlTemplate o DataTemplate; no toda la funcionalidad de la plantilla está disponible cuando crea una plantilla usando esta clase. La forma recomendada de crear una plantilla mediante programación es cargar XAML desde una cadena o una secuencia de memoria utilizando el método Load de la clase XamlReader.
Me pregunto si esta recomendación es una buena idea. Personalmente, seguiría definiendo la plantilla como un recurso en XAML si puedo evitar hacerlo con cadenas y el XamlReader
.
Gracias funcionó perfectamente ... Sé que no es una buena idea, pero no tengo otra opción en un caso particular –
Bueno, acabo de citar el texto del sitio que encontré .. Y qué pasa con el uso de 'XamlReader.Parse ¿? –
@Ai_boy: Es solo un análisis de XAML, que es innecesario y no es algo que recomendaría, si tiene XAML estático, es mejor crearlo como recurso XAML en lugar de piratear una cadena XML en código subyacente. –