2012-05-21 18 views
53

En App.xaml, tengo el siguiente código:Establecer la propiedad Style de una etiqueta WPF en el 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, que tienen la siguiente línea de código:

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

Sin embargo, me gustaría para inicializar la propiedad Style a través de código. He tratado:

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

y

label1.Style = "{StaticResource LabelTemplate}"; 

Ni solución era válida.

Cualquier ayuda sería apreciada :).

+0

¿Hay alguna razón para hacer esto desde el código subyacente de UserControl? Tal vez hay soluciones más elegantes. – csteinmueller

Respuesta

127

¿Dónde está el código tratando de obtener el estilo? ¿Código detrás?

Usted debe escribir esto:

Si estás en código subyacente:

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

Si estás en otro lugar

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

nota Abajo: no llame al Style con la palabra clave Template, eventualmente terminará confundiendo un Style y un Template, y no debería, ya que esos son dos conceptos diferentes.

+1

Nice One sigue publicando buena sugerencia .... –

+0

Encontré usando "Aplicación" .Current.FindResource() en lugar de "Aplicación". – Seva

+0

Aparece FindResource no encontrado –

2

Por favor, compruebe resultado nulo o estilo va a estar triste ... ... si this.Style = estilo (estilo! = Null);

+5

Cuando es nulo, puede llorar o manipular y corregir el problema . – Allen

0

Tal vez una vieja pregunta, pero si usted está tratando de aplicación W10 uwp debe utilizar la colección de recursos de cada objeto o recursos colección de objetos de aplicación

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

Dónde MyStyleTemplateName debe definirse como un recurso de este

Cuestiones relacionadas