2010-04-10 17 views
14

मैं कैसे (सी # का उपयोग करके) और फिर उस DataTemplate करने के लिए एक नियंत्रण जोड़ने के कोड में एक DataTemplate बना सकते हैं?कोड में डेटा टेम्पलेट को कैसे परिभाषित करें?

<data:DataGrid.RowDetailsTemplate> 
    <DataTemplate> 
     <Border> 
      <Border Margin="10" Padding="10" BorderBrush="SteelBlue" 
       BorderThickness="3" CornerRadius="5"> 
       <TextBlock Text="{Binding Description}" TextWrapping="Wrap" 
        FontSize="10"> 
       </TextBlock> 
      </Border> 
     </Border> 
    </DataTemplate> 
</data:DataGrid.RowDetailsTemplate> 

मैं शिवलरलाइट का उपयोग कर रहा हूं।

उत्तर

9

जहाँ तक मुझे पता है, एक ही रास्ता बनाने के लिए Silverlight में एक DataTemplateXamlReader उपयोग करने के लिए है। असल में आप इसे XAML को एक स्ट्रिंग के रूप में पास कर देंगे और यह आपको DataTemplate वापस देगा। बायरन का समाधान WPF पर लागू होगा लेकिन सिल्वरलाइट (मेरे ज्ञान का सबसे अच्छा) FrameworkElementFactory का समर्थन नहीं करता है। DataGridTemplateColumn के लिए # 2 विकल्प की

Scott Morrison: Defining Silverlight DataGrid Columns at Runtime

लें टिप्पणी।

+0

+1 यह सही है। व्यक्तिगत रूप से मैं Xaml को आवश्यक बनाने के लिए LinqToXml ऑब्जेक्ट्स का उपयोग करना पसंद करता हूं लेकिन आखिरकार एक परिणाम स्ट्रिंग को प्रोग्रामलेटिक रूप से डेटा टेम्पलेट बनाने के लिए XamlReader को पास करने की आवश्यकता होती है। – AnthonyWJones

1

माइक्रोसॉफ्ट MSDN पर एक अच्छा लेख से अधिक है: "। Data Templating Overview" मैं वहां से शुरू करूंगा।

अद्यतन: हाँ, कि खरोंच। मैंने "कोड में" के लिए आपकी आवश्यकता को पढ़ा। मैं इस पोस्ट पर जो भी ठोकर खा सकता हूं, उसके लिए मैं यहां लिंक छोड़ दूंगा।

4

आप एक FrameworkElementFactory का उपयोग कर एक TextBlock की तरह एक नियंत्रण जोड़ सकते हैं। तो फिर तुम DataTemplate की VisualTree को TextBlock जोड़ सकते हैं। इसलिए जैसा:

//Create binding object and set as mode=oneway 
Binding binding = new Binding(); 
binding.Path = new PropertyPath("SomePropertyPathName"); 
binding.Mode = BindingMode.OneWay; 

//get textblock object from factory and set binding 
FrameworkElementFactory textElement = new FrameworkElementFactory(typeof(TextBlock)); 
textElement.SetBinding(TextBlock.TextProperty, binding); 

//apply textblock to datatemplate 
dataTemplate.VisualTree = textElement; 
+2

ओपी वह सिल्वरलाइट जो के रूप में तक मुझे पता है FrameworkElementFactory का समर्थन नहीं करता उपयोग कर रहा है कहते हैं। – Josh

+0

तो वह है, मेरी गलती। –

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