2012-06-13 13 views
5

के बीच अंतर SetValue (उदाहरण के लिए) Canvas.LeftProperty और Margin संपत्ति के बीच कोई अंतर है?कैनवास संपत्ति और मार्जिन

अधिक स्पष्ट है:

<Canvas> 
    <Rectangle x:Name="rect">       
</Canvas> 

rect.SetValue(Canvas.LeftProperty, 10) 

को

rect.Margin = new Thickness(10, 0, 0, 0) 

या नहीं के बराबर है?

उत्तर

4

ऑब्जेक्ट के आस-पास अतिरिक्त स्थान निर्धारित करने के लिए मार्जिन प्रॉपर्टी का उपयोग प्रत्येक तत्व के साथ किया जाता है। यह लगभग सभी प्रकार के लेआउटिंग (स्टैकपैनेल, ग्रिड, कंटेंट कंट्रोल्स इत्यादि) में काम करता है

कैनवास। लेफ्टप्रॉपर्टी (साथ ही शीर्ष, दाएं और नीचे) केवल उन तत्वों पर लागू होते हैं जो सीधे कैनवास के अंदर होते हैं। कैनवास इन मानों का उपयोग यह निर्धारित करने के लिए करेगा कि कोई वस्तु कहां होनी चाहिए। पथ जैसे तत्व तत्वों के साथ, स्थिति निर्धारित करते समय कैनवास आकार के स्थान डेटा को भी देखता है।

तकनीकी रूप से, कैनवास संलग्न गुणों को आकार (यदि कोई हो) के साथ-साथ मार्जिन के अंतर्निहित स्थान डेटा के साथ जमा होना चाहिए। आप स्थिति को संशोधित करने के लिए सभी 3 का उपयोग कर सकते हैं। लेकिन आमतौर पर आप इसे सरल रखने की कोशिश करेंगे।

उदाहरण के लिए, एक आयताकार को इसकी चौड़ाई और ऊंचाई गुणों के साथ-साथ कैनवास का उपयोग करना चाहिए। लिफ्ट और कैनवास। टॉप। एक पथ या तो बस अपने बिंदु डेटा पर भरोसा करेगा या यह इसे कैनवास के साथ ऑफसेट करेगा। लिफ्ट और कैनवास। टॉप। आपको कैनवास के अंदर तत्वों के लिए मार्जिन का उपयोग नहीं करना चाहिए क्योंकि इसका उपयोग किए बिना आपके पास बेहतर नियंत्रण है, लेकिन आप तकनीकी रूप से कर सकते हैं।

1

ऐसा लगता है लेकिन पहले मामले में कैनवास आपको rect पर 10 बिंदु पर ले जाता है। दूसरे rect में 10 बिंदु में ठीक है।

अपने उद्देश्यों के अनुसार इस तरह से एक का उपयोग करें।

संपादित करें: यदि WPF कोड में अधिक गहराई से देखो। पहले मामले में rect को ArrangeOverride में कैनवास के ArrangeOverride में आयत के ArrangeOverride में स्थानांतरित किया गया है।

+0

ठीक है, लेकिन क्या अंतर है (यदि कोई है तो)? – Nick

+0

मेरे संपादित उत्तर की जांच करें। – RredCat

0
Canvas.Left 
Canvas.Right 
Canvas.Top 
Canvas.Bottom 

केवल कैनवास कंटेनर के अंदर लागू की गई हैं, वे चौड़ाई और अपने नियंत्रण वे के साथ संलग्न कर रहे हैं की उंचाई को बदलना नहीं होंगे। (बाएं = 10, सही = 10 प्रत्येक पक्ष पर 10 के अंतर देने के लिए खिंचाव नहीं होगा)

Margin.Left 
Margin.Right 
Margin.Top 
Margin.Bottom 

वस्तु द्वारा नियंत्रित किया जाता है कि उस पर स्थापित किया गया है, इसके लिए एक ग्रिड पर एक कैनवास के बाहर काम करेंगे उदाहरण और इसके मूल्य को लागू करने के लिए किसी भी नियंत्रण की चौड़ाई और ऊंचाई को बदल देगा (अगर चौड़ाई और ऊंचाई NaN हैं)।

0

आप टेम्पलेट बाइंडिंग या नियमित बाइंडिंग का उपयोग करके ऑब्जेक्ट के अपने टेम्पलेट के अंदर Margin संपत्ति का उपयोग कर सकते हैं क्योंकि यह निर्भरता प्रॉपर्टी है। यह वस्तु की चौड़ाई और ऊंचाई को भी समायोजित करता है।

कैनवास गुण फ्रेमवर्क एलिमेंट के लिए गुण संलग्न हैं और उन तत्वों की स्थिति को अनुमति देते हैं जिनमें मार्जिन प्रॉपर्टी नहीं हो सकती है।और यदि ऑब्जेक्ट में कैनवास माता-पिता नहीं हैं तो वे काम नहीं करते हैं।

1

एक तत्व के लिए सीधे Canvas में, केवल अंतर ही साधनों में है। अंतिम परिणाम बिल्कुल वही है।

जब Rectangle स्थित है, लेआउट इंजन अपनी स्थिति को प्रभावित करने वाले सभी मानों को एक साथ जोड़ देगा। X समन्वय के लिए इसमें Canvas.Left और Margin.Left शामिल हैं।

तो एक मामले में यह 10 + 0 जोड़ रहा है, और दूसरे में यह 0 + 10 जोड़ रहा है।

तो आप जो भी चाहें उसके साथ जाएं। व्यक्तिगत रूप से मैं इस स्थिति में Canvas.Left पसंद करता हूं क्योंकि ऐसा लगता है कि यह अधिक प्रासंगिक समझ में आता है।

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