2009-11-18 12 views
45

私はXAMLのコードでは、このと同等のものを生成します:コードで動的リソーススタイルを割り当てる方法は?

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

私はテキストと幅を行うことができますが、どのように私はスタイルに動的なリソース割り当てます:

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

ここで他の人が指摘したように、あなたは正しいものとしてマーク答えは、実際に問題が提起何をしません。ここには別の答えがあります。それに応じて回答を変更することを検討する必要があります。なぜなら、マークされた回答を読んでいる人もいますし、正しい情報を見逃してしまう人もいるからです。 – MarqueIV

答えて

27

あなたが試すことができます。

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

お楽しみください!

+20

回答は、XAMLの{DynamicResource}と同じですが、回答がtb.Styleをリソース "FormLabelStyle"の現在の値に変更しているため、Samuelの方が優れています。しかし、リソース "FormLabelStyle"が変更されたときに、tb.Styleは変更されません。 –

3

をこれは動作するはずです:

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

このメソッドと 'SetResourceReference'の違いは何ですか? – SepehrM

+0

これは 'tb.Style =" FormLabelStyle "'と同じです。これはCLRラッパーが内部的に行うものです。 – Palec

+0

これは 'ArgumentException'をスローします:' 'FormLabelStyle 'はプロパティ' Style 'に対して有効な値ではありません。' 'tb.Style =" FormLabelStyle ";'を使用すると、セマンティクスは同じです(CLRラッパープロパティ内部的に同じコードを呼び出す)が、厳密な型チェック(良い)のためコンパイル時に失敗する。 – Palec

140

実際のDynamicResourceの動作、つまりリソー​​スが変更されたときにターゲット要素を更新する場合は、FrameworkElement.SetResourceReferenceを使用する必要があります。

tb.SetResourceReference(Control.StyleProperty, "FormLabelStyle") 
関連する問題