Propiedades estáticas/dinámicas en código en WPF y nomenclatura
-
29-10-2019 - |
Pregunta
Tengo un botón definido en mi XAML que tiene un estilo de botón y un gráfico vectorial, se define así:
<Button
Height="48"
Width="48"
mvp:Presenter.Action="CreateStudentApplication"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Grid.Row="5"
Grid.Column="3"
Style="{DynamicResource BaseButton2}">
<ContentControl Template="{StaticResource ApplicationVector}"/>
</Button>
En mi código de código, tengo un método que agrega dinámicamente nuevos botones similares a este a un StackPanel. En resumen, hace algo por la melodía de:
var button = new Button();
button.Height = 48;
button.Width = 48;
button.Tag = x.ID;
button.SetResourceReference(TemplateProperty, "ApplicationVector");
button.SetResourceReference(StyleProperty, "BaseButton2");
Ahora aquí está la parte extraña: muestra solo el gráfico vectorial y ningún botón detrás de él. Cuando elimino la línea penúltima (la línea con la referencia del vector), ¡muestra el botón Styled como debería ser! Supongo que establecer la plantilla está anulando el estilo, sin embargo, parecen jugar amigablemente en XAML. También he intentado establecer el ContentProperty Instidead de TemplateProperty, pero esto resultó en una cadena del tipo. ¿Algunas ideas? ¡Gracias!
Solución
Su XAML y Código detrás no son equivalentes. En el XAML, estás configurando el Content
propiedad del botón para ser un ContentControl
. En el código detrás, está configurando el Template
(o Content
) propiedad para ser la ApplicationVector
recurso.
Necesitarías establecer el Content
propiedad del botón para ser una instancia de un ContentControl
cuyo Template
la propiedad está configurada para ser su ApplicationVector
recurso.
var contentControl = new ContentControl();
contentControl.SetResourceReference(TemplateProperty, "ApplicationVector");
button.Content = contentControl;