2009-11-18 70 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 2015-09-27 08:02:14

回答

27

你可以試試:

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

享受!

+20

答案塞繆爾更好,因爲它相當於XAML中的{DynamicResource},而您的答案將tb.Style更改爲資源「FormLabelStyle」的當前值。但是,當資源「FormLabelStyle」更改時,tb.Style不會更改。 – 2013-07-05 07:23:16

3

這應該工作:

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

這個方法和'SetResourceReference'有什麼區別? – SepehrM 2014-04-30 15:22:23

+0

這相當於'tb.Style =「FormLabelStyle」'。這是CLR包裝器在內部執行的操作。 – Palec 2016-12-11 11:42:27

+0

這會拋出一個'ArgumentException':''FormLabelStyle'不是屬性'Style'的有效值。如果使用等效的'tb.Style =「FormLabelStyle」;',則語義相同(CLR包裝器屬性在內部調用相同的代碼),但由於嚴格的類型檢查(這很好),它在編譯時失敗。 – Palec 2016-12-11 12:37:10

140

如果您需要真正的DynamicResource行爲,即在資源更改時更新目標元素,則應使用FrameworkElement.SetResourceReference

tb.SetResourceReference(Control.StyleProperty, "FormLabelStyle") 
相關問題