2009-11-18 7 views
45

Je veux produire dans le code l'équivalent de ce en XAML:Comment affecter un style de ressource dynamique au code?

<TextBlock 
Text="Title:" 
Width="{Binding FormLabelColumnWidth}" 
Style="{DynamicResource FormLabelStyle}"/> 

je peux faire le texte et la largeur, mais comment puis-je attribuer la ressource dynamique du style:

TextBlock tb = new TextBlock(); 
      tb.Text = "Title:"; 
      tb.Width = FormLabelColumnWidth; 
      tb.Style = ??? 
+5

Comme d'autres l'ont souligné, la réponse que vous avez indiquée comme correcte ne fait pas réellement ce que la question pose. Il y a une autre réponse ici. Vous devriez envisager de changer votre réponse en conséquence parce que certaines personnes lisent la réponse marquée et rien d'autre et ils manqueront l'information correcte, qui est ce que SO est tout au sujet. – MarqueIV

Répondre

27

Vous pouvez essayer:

tb.Style = (Style)FindResource("FormLabelStyle"); 

Amusez-vous!

+20

La réponse de Samuel est meilleure, puisque c'est l'équivalent de {DynamicResource} en XAML, alors que votre réponse change tb.Style à la valeur actuelle de la ressource "FormLabelStyle". tb.Style ne change pas lorsque la ressource "FormLabelStyle" change, cependant. –

3

Cela devrait fonctionner:

tb.SetValue(Control.StyleProperty, "FormLabelStyle"); 
+4

Quelle est la différence entre cette méthode et 'SetResourceReference'? – SepehrM

+0

Ceci est équivalent à 'tb.Style =" FormLabelStyle "'. C'est ce que fait l'encapsuleur CLR en interne. – Palec

+0

Ceci lance une 'ArgumentException':' 'FormLabelStyle' n'est pas une valeur valide pour la propriété 'Style' .' Si vous utilisez l'équivalent 'tb.Style =" FormLabelStyle ";', la sémantique est la même (la propriété de l'encapsuleur CLR appelle le même code en interne), mais il échoue à la compilation en raison de la vérification stricte des types (ce qui est bien). – Palec

140

Vous devez utiliser FrameworkElement.SetResourceReference si vous voulez un véritable comportement DynamicResource, c'est-à-dire la mise à jour de l'élément cible lorsque la ressource change.

tb.SetResourceReference(Control.StyleProperty, "FormLabelStyle")