कोडबेहिंड में टेम्पलेट बनाना एक अच्छा विचार नहीं है, सिद्धांत में यह ControlTemplate.VisualTree
को परिभाषित करके ऐसा करेगा जो FrameworkElementFactory
है।
ControlTemplate template = new ControlTemplate(typeof(Button));
var image = new FrameworkElementFactory(typeof(Image));
template.VisualTree = image;
गुण नियत बहुत राउंडअबाउट है जब से तुम SetValue
और SetBinding
उपयोग करने की आवश्यकता:
image.SetValue(Image.SourceProperty, ...);
इसके अलावा, (पहले) स्वीकार किए जाते हैं जवाब और सामान उद्धृत के बारे में:
स्थापना ControlTemplate प्रोग्रामेटिक रूप से XAML का उपयोग करने जैसा है क्योंकि हमें एक्स का उपयोग करना है amlReader वर्ग।
यही बयान सिर्फ गलत है, हम नहीं "करने के लिए है" है।
तो मैं रन टाइम पर टेम्पलेट्स मैं एक संसाधन है जो मैं अगर मैं इसकी आवश्यकता लोड कर सकते हैं के रूप में उन्हें परिभाषित आवंटित।
संपादित करें: प्रलेखन FrameworkElementFactory
के अनुसार अब मान्य नहीं है:
इस वर्ग प्रोग्राम के रूप में टेम्पलेट्स, जो इस तरह के ControlTemplate या DataTemplate के रूप में FrameworkTemplate की उपवर्गों हैं बनाने के लिए एक पदावनत रास्ता है; जब आप इस वर्ग का उपयोग कर टेम्पलेट बनाते हैं तो सभी टेम्पलेट कार्यक्षमता उपलब्ध नहीं होती है। प्रोग्रामेटिक रूप से टेम्पलेट बनाने का अनुशंसित तरीका XamlReader क्लास की लोड विधि का उपयोग कर स्ट्रिंग या मेमोरी स्ट्रीम से XAML लोड करना है।
मुझे आश्चर्य है कि यह सिफारिश इतनी अच्छी विचार है। व्यक्तिगत रूप से मैं अभी भी एक्सएएमएल में संसाधन के रूप में टेम्पलेट को परिभाषित करने के साथ जाऊंगा यदि मैं तारों और XamlReader
के साथ ऐसा करने से बच सकता हूं।
स्रोत
2011-04-22 13:08:03
धन्यवाद पूरी तरह से काम किया है ... मुझे पता है यह एक अच्छा विचार नहीं है, लेकिन मैं एक विशेष मामले –
खैर में कोई विकल्प नहीं है, मैं सिर्फ बोली पाठ साइट मैंने पाया .. और क्या XamlReader.Parse का उपयोग कर 'के साथ गलत फार्म '? –
@Ai_boy: यह सिर्फ एक्सएएमएल की पार्सिंग है, जो अनावश्यक है और कुछ ऐसा नहीं है जो मैं अनुशंसा करता हूं, यदि आपके पास स्थिर एक्सएएमएल है तो इसे एक्सएमएल संसाधन के रूप में बनाने के बजाय इसे एक्सएमएल स्ट्रिंग को कोड-बैक में हैक करने के बजाय बेहतर बनाना है। –