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 को बदलता है। संसाधन "FormLabelStyle" के वर्तमान मूल्य के लिए। tb.Style तब नहीं बदलता जब संसाधन "FormLabelStyle" बदलता है, यद्यपि। –

3

यह काम करना चाहिए:

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

इस विधि और 'SetResourceReference' के बीच क्या अंतर है? – SepehrM

+0

यह 'tb.Style =" FormLabelStyle "' के बराबर है। यह सीएलआर रैपर आंतरिक रूप से करता है। – Palec

+0

यह 'ArgumentException' फेंकता है:' 'FormLabelStyle' संपत्ति 'शैली' के लिए मान्य मान नहीं है। 'यदि आप समकक्ष 'tb.Style =" FormLabelStyle "का उपयोग करते हैं;', अर्थशास्त्र समान हैं (सीएलआर रैपर संपत्ति आंतरिक रूप से एक ही कोड को कॉल करता है), लेकिन यह सख्त प्रकार की जांच (जो अच्छा है) के कारण संकलन समय में विफल रहता है। – Palec

140

यदि आप सही डायनामिक रिसोर्स व्यवहार चाहते हैं तो आपको FrameworkElement.SetResourceReference का उपयोग करना चाहिए - यानी संसाधन बदलते समय लक्ष्य तत्व को अद्यतन करना।

tb.SetResourceReference(Control.StyleProperty, "FormLabelStyle") 
संबंधित मुद्दे