2011-08-24 10 views
25

के माध्यम से कैनवास में आइटम कैसे प्रदर्शित करें मेरे पास डेटा बाध्यकारी का उपयोग कर कैनवास में प्रदर्शित होने वाली वस्तुओं की सूची है।बाध्यकारी

ItemsToShowInCanvas = new ObservableCollection<ItemDetail> 
    { 
     new ItemDetail {Text = "ABC", Top = 10, Left = 200}, 
     new ItemDetail {Text = "DEF", Top = 100, Left = 300}, 
     new ItemDetail {Text = "PQR", Top = 50, Left = 150} 
    }; 

ItemDetail पाठ के लिए स्वत: गुणों के साथ एक सरल वर्ग है, शीर्ष और वाम को महत्व देता

public class ItemDetail 
{ 
    public string Text { get; set; } 
    public double Top { get; set; } 
    public double Left { get; set; } 
} 

जब मैं आइटम DataBind, वे कैनवास में दिखाई पड़ता है। लेकिन आइटम शीर्ष और बाएं गुणों का उपयोग करके उल्लिखित स्थितियों पर प्रकट नहीं होते हैं।

<Canvas> 
    <ItemsControl ItemsSource="{Binding Path=ItemsToShowInCanvas}"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Path=Text}" Canvas.Top="{Binding Path=Top}" Canvas.Left="{Binding Path=Left}"/> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</Canvas> 
+2

ItemsControl में TextBlock बाँध डिफ़ॉल्ट itemspanel के रूप में StackPanel उपयोग करता है। जो टेक्स्टब्लॉक आप जोड़ रहे हैं वह वास्तव में एक स्टैकपैन में जोड़ रहा है लेकिन कैनवास नहीं है। आइटम नियंत्रण कैनवास में जोड़ रहा है। कैनवास – Bathineni

+0

पर itempanel को बदलने का प्रयास करें bathineni के उत्तर के लिए धन्यवाद। मैंने आइटमपैनल को कैनवास के रूप में डालने की कोशिश की लेकिन यह काम नहीं किया। आइटम एक दूसरे पर दिखाना शुरू कर दिया। ItemContainerStyle जोड़ना काम किया। –

+0

[डुप्लिकेट] का संभावित डुप्लिकेट: क्या एक्सएएमएल में कैनवास की बच्चों की संपत्ति को बांधना संभव है?] (Http://stackoverflow.com/questions/889825/wpf-is-it-possible-to-bind-a-canvass-children -प्रोपर्टी-इन-एक्सएएमएल) –

उत्तर

37

सेट एक Canvas करने के लिए ItemsPanel और बजाय कंटेनर DataTemplate

<ItemsControl ItemsSource="{Binding Path=ItemsToShowInCanvas}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Canvas/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemContainerStyle> 
     <Style TargetType="ContentPresenter"> 
      <Setter Property="Canvas.Left" Value="{Binding Left}"/> 
      <Setter Property="Canvas.Top" Value="{Binding Top}"/> 
     </Style> 
    </ItemsControl.ItemContainerStyle> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Path=Text}" /> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 
+0

यदि मेरे पास 'टेक्स्टब्लॉक' के बजाय 'आकार' है तो क्या मैं बस एक दूसरे के साथ प्रतिस्थापित कर सकता हूं? – IAbstract

+0

साथ ही, 'आइटम कंट्रोल' दस्तावेज़ पेड़ में कहां रहता है? – IAbstract

+0

आइटम नियंत्रण IItemsContainerStyle बस मुझे जो चाहिए वह बाकी काम कर रहा था। एक गुच्छा धन्यवाद। – Grenter