किसी आइटम्सकंट्रोल डेटाटेम्पलेट में कैनवस गुण सेट करना


80

मैं इस के लिए databind करने की कोशिश कर रहा हूँ ItemsControl:

<ItemsControl ItemsSource="{Binding Path=Nodes, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>

इसका उपयोग करके DataTemplate, मैं व्यक्तिगत रूप से अपने Nodeतत्वों को Canvasसही ढंग से रखने की कोशिश कर रहा हूं :

<DataTemplate DataType="{x:Type Model:EndNode}">
    <Controls:EndNodeControl Canvas.Left="{Binding Path=XPos}" Canvas.Top="{Binding Path=YPos}" />
</DataTemplate>

हालाँकि, यह अपेक्षा के अनुरूप काम नहीं कर रहा है। मेरे सभी नोड तत्व एक ही स्थिति में एक दूसरे के ऊपर खींचे जाते हैं। इसे पूरा करने के बारे में कोई सुझाव?

जवाबों:


137

संलग्न गुण केवल के प्रत्यक्ष बच्चों पर काम करते हैं Canvas। नियंत्रणों को अपने सीधे बच्चों के रूप में ItemsControlरखेगा ContentPresenter, ताकि आप उसके लिए एक शैली जोड़ना चाहें:

<ItemsControl ItemsSource="{Binding Path=Nodes}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemContainerStyle>
        <Style TargetType="ContentPresenter">
            <Setter Property="Canvas.Left" Value="{Binding Path=XPos}" />
            <Setter Property="Canvas.Top" Value="{Binding Path=YPos}" />
        </Style>
    </ItemsControl.ItemContainerStyle>
</ItemsControl>

धन्यवाद। मुझे यह समाधान लगभग 5 मिनट पहले मिला था। मुझे लगता है कि मैं सवाल पोस्ट करने में थोड़ा तेज था। :)
atsjoo

9
Hehe .. मैं उन AHA पल के रूप में अच्छी तरह से प्यार करता हूँ;) .. और यह सब हालांकि बुरा नहीं है .. शायद आपके सवाल एक दिन अन्य लोगों की मदद कर सकते हैं .. आपको कभी पता नहीं चलेगा!
आर्कटिकस

इसने यहाँ भी, सभी के लिए +1 की मदद की। :)
रूण जैकबसेन

1
@ मुझे एक ही समस्या है, क्या इसके लिए सिल्वरलाइट वर्कअराउंड है?
थीमास्टरो

4
क्या होगा यदि मेरा X और Y पोज़िशन, आइटम्स के स्रोत में से एक के अंदर होना चाहिए? मुझे अपने ItemSource में एक पॉइंट ऑब्जेक्ट मिला।
एल मैक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.