2009-12-14 18 views
5

मैं प्रोग्रामेटिक रूप से सिल्वरलाइट 3.0 ऐप में डेटा टेम्पलेट में ईवेंट और तत्वों को प्रोग्राम करने की कोशिश कर रहा हूं। मेरे पास एक निर्भरता संपत्ति वाला उपयोगकर्ता नियंत्रण है जहां मैं सेट किया गया टेम्पलेट लेना चाहता हूं, इसे ट्वीक करना चाहता हूं, और फिर संशोधित संस्करण को आंतरिक नियंत्रण में सेट करना चाहता हूं।प्रोग्रामेटिक रूप से डेटा टेम्पलेट को कैसे संशोधित करें?

मेरे पास विचार है कि डेटा टेम्पलेट जो आता है, उसे एक्सएएमएल पढ़ें, इसे ट्वीक करें, और फिर संशोधित डेटा टेम्पलेट बनाने के लिए XamlReader का उपयोग करें जिसे बाद में आंतरिक नियंत्रण में सेट किया जा सकता है। इस दृष्टिकोण के साथ इस मुद्दे को मैं कैसे originalal टेम्पलेट से XAML पाने के लिए पता है नहीं उदाहरण के लिए (अगर यह भी संभव है।):

protected virtual void OnItemTemplateChanged(DependencyPropertyChangedEventArgs e) 
{ 
    // Get the original Xaml from the set template 
    //string originalXaml = ??? 

    // Modify the template 
    string newXaml = originalXaml.Replace("foo", "bar"); // for example 

    // Create a new template from the modified XAML 
    DataTemplate newTemplate = (DataTemplate)XamlReader.Load(newXaml); 

    // Update the inner template 
    this._childDropdown.ItemTemplate = newTemplate; 
} 

कोई पता है या तो: 1) वहाँ का कोई तरीका है पढ़ने के लिए मूल XAML, या 2) डेटा टेम्पलेट को प्रोग्रामेटिक रूप से संशोधित करने के लिए एक और तरीका।

धन्यवाद,

उत्तर

1

आप कोड के माध्यम से टेम्पलेट (FrameworkTemplate के दस्तावेज़ देखें) में हेरफेर नहीं कर सकते। निकटतम आप प्राप्त करने के लिए जा रहे हैं DataTemplate के LoadContent निहित Xaml का एक उदाहरण बनाने के लिए कॉल करने के लिए है, लेकिन आपको लगता है कि उपयोग नहीं कर सकते सामग्री में हेरफेर करने और वहाँ सिल्वरलाइट अंदर कोई रास्ता नहीं एक UIElement वापस Xaml करने के लिए फिर से कन्वर्ट करने के लिए है।

निकटतम मुझे लगता है कि आप प्राप्त कर सकते हैं अपनी निर्भरता वस्तु एक उरी एक Xaml संसाधन है कि प्रारंभिक DataTemplate शामिल की ओर इशारा करते बनाना है।

फिर आप एक XDocument में इस संसाधन लोड और XML के रूप में यह हेरफेर कर सकते हैं। इसके बाद आप DataTemplate उदाहरण के लिए XamlReader का उपयोग कर सकते हैं और इसे ItemTemplate पर असाइन कर सकते हैं।

+0

मैं (कड़वाहट से) ने अपनी परियोजना को फिर से काम किया ताकि उसे डेटा टेम्पलेट में हेरफेर की आवश्यकता न हो। यह वही नहीं है जो मैं चाहता था लेकिन कम से कम मैं ऐसा करने का प्रयास करने में और अधिक समय बर्बाद नहीं कर रहा हूं। धन्यवाद, मुझे उम्मीद है कि सिल्वरलाइट का भविष्य संस्करण डेटा टेम्पलेट के कुछ प्रोग्रामेटिक हेरफेर की अनुमति देता है। –

+0

मुझे लगता है कि मैं कस्टम जनरेटर के साथ आइटम्स कंट्रोल आइटमकंटनर जेनरेटर को प्रतिस्थापित करने की क्षमता के रूप में क्या देखना चाहता हूं, जिसे हम फिलहाल नहीं कर सकते हैं, मुझे एसएल 4 देखना होगा कि यह अनुमति देता है या नहीं। – AnthonyWJones

संबंधित मुद्दे