¿Establecer la propiedad de estilo de una etiqueta WPF en el código?

82

En App.xaml, tengo el siguiente código:

<Application.Resources>
    <Style x:Key="LabelTemplate" TargetType="{x:Type Label}">
        <Setter Property="Height" Value="53" />
        <Setter Property="Width" Value="130" />
        <Setter Property="HorizontalAlignment" Value="Left" />
        <Setter Property="Margin" Value="99,71,0,0" />
        <Setter Property="VerticalAlignment" Value= "Top" />
        <Setter Property="Foreground" Value="#FFE75959" />
        <Setter Property="FontFamily" Value="Calibri" />
        <Setter Property="FontSize" Value="40" />
    </Style>
</Application.Resources>

Esto está destinado a proporcionar una plantilla genérica para mis etiquetas.

En el código XAML principal, tengo la siguiente línea de código:

<Label Content="Movies" Style="{StaticResource LabelTemplate}" Name="label1" />

Sin embargo, me gustaría inicializar la propiedad Style a través del código. Yo he tratado:

label1.Style = new Style("{StaticResource LabelTemplate}");

y

label1.Style = "{StaticResource LabelTemplate}";

Ninguna solución fue válida.

Cualquier ayuda sería apreciada :).

Daniel
fuente
¿Hay alguna razón para hacer esto desde el código subyacente de UserControl? Quizás haya soluciones más elegantes.
csteinmueller

Respuestas:

183

¿En qué parte del código intentas conseguir el estilo? ¿Código detrás?

Deberías escribir esto:

Si está en código subyacente:

Style style = this.FindResource("LabelTemplate") as Style;
label1.Style = style;

Si estas en otro lugar

Style style = Application.Current.FindResource("LabelTemplate") as Style;
label1.Style = style;

Nota inferior: no nombre a Stylecon la palabra clave Template, eventualmente terminará confundiendo a Styley a Template, y no debería, ya que son dos conceptos diferentes.

Damasco
fuente
Encontré el uso de "App" .Current.FindResource () en lugar de "Aplicación".
alansiqueira27
Recibo FindResource not found
Welsh King
Encontré una solución stackoverflow.com/questions/17704969/…
Welsh King
Me ayuda mucho. Gracias ^^
Dôn Kayt
3

Por favor, compruebe si hay un resultado de estilo nulo o se entristecerá ... ... if (style! = Null) this.Style = style;

Allen
fuente
10
Cuando es nulo, puede llorar o hacer frente y corregir el problema.
Allen
0

Tal vez sea una pregunta anterior, pero si está probando la aplicación W10 UWP, debe usar la colección de recursos de cada objeto o la colección de recursos del objeto Aplicación

KeyValuePair<object,object> styl = this.Resources
    .Where(x => x.Key.ToString() == "MyStyleTemplateName")
    .FirstOrDefault();
if (styl.Value != null)
    Style MyStyle = (Style)styl.Value;

Donde MyStyleTemplateName debe definirse como un recurso de este

Juan Pablo Gómez
fuente