MyControl.Margin.Left = 10;
त्रुटि:कोड में मार्जिन गुण स्थापना
Cannot modify the return value of 'System.Windows.FrameworkElement.Margin' because it is not a variable
MyControl.Margin.Left = 10;
त्रुटि:कोड में मार्जिन गुण स्थापना
Cannot modify the return value of 'System.Windows.FrameworkElement.Margin' because it is not a variable
समस्या यह है कि Margin
एक संपत्ति है, और इसका प्रकार (Thickness
) एक मूल्य प्रकार है। इसका मतलब है कि जब आप संपत्ति का उपयोग करते हैं तो आपको मूल्य वापस की प्रतिलिपि मिल रही है।
भले ही आप एक विशेष मूल्य के लिए Thickness.Left
संपत्ति के मूल्य बदल सकते हैं (grr ... परिवर्तनशील मूल्य प्रकार मौजूद नहीं होना चाहिए), यह मार्जिन में परिवर्तन नहीं होगा।
इसके बजाय, आपको Margin
संपत्ति को नए मान पर सेट करने की आवश्यकता होगी। उदाहरण के लिए (संयोग मार्क के रूप में एक ही कोड लिखा था):
Thickness margin = MyControl.Margin;
margin.Left = 10;
MyControl.Margin = margin;
पुस्तकालय डिजाइन के लिए एक नोट के रूप में, मैं बेहद यह पसंद किया जाता है | अगर Thickness
अपरिवर्तनीय थे, लेकिन तरीकों कि एक नया मान जिसकी एक प्रति था लौटे साथ मूल, लेकिन एक भाग के साथ बदल दिया। तो फिर तुम लिख सकते हैं:
MyControl.Margin = MyControl.Margin.WithLeft(10);
परिवर्तनशील मूल्य प्रकार, अच्छा और पठनीय के अजीब व्यवहार के बारे में कोई चिंता, सभी एक अभिव्यक्ति ...
एक अनुमान होता है कि (और मेरी WPF अभी कुछ पुरानी है) कि मार्जिन एक वस्तु लेता है और सीधे बदला नहीं जा सकता।
, उदा,
MyControl.Margin = new Margin(10,0,0,0);
यह काम नहीं करता है: _ 'सिस्टम। Windows.FrameworkElement.Margin' एक 'संपत्ति' है लेकिन इसका उपयोग किया जाता है एक 'type'_ –
Margin
एक struct, जिसका मतलब है कि आप एक प्रतिलिपि संपादन कर रहे हैं कि लौटा रहा है।
var margin = MyControl.Margin;
margin.Left = 10;
MyControl.Margin = margin;
MyControl.Margin = मार्जिन की तरह; – TheMissingLINQ
(चीयर्स, कुछ समय पहले तय किया गया था ... मुझे उम्मीद है कि आपको एक पेज रीफ्रेश की आवश्यकता है; -पी) –
हे, अगर हमारे पास अजाक्स टिप्पणी अपडेट था तो मैं एक उपकरण की तरह नहीं दिख रहा था ... – TheMissingLINQ
Margin
संपत्ति एक Thickness
संरचना, जिनमें से Left
एक संपत्ति है देता है: आप की तरह कुछ की आवश्यकता होगी। कथन क्या करता है Margin
संपत्ति से संरचना मूल्य की प्रतिलिपि बना रहा है और प्रतिलिपि पर Left
संपत्ति मान सेट कर रहा है। आपको एक त्रुटि मिलती है क्योंकि आपके द्वारा सेट किया गया मान Margin
संपत्ति में वापस संग्रहीत नहीं किया जाएगा।
(सी # के पुराने संस्करण बस, शिकायत के बिना आप इसे करते हैं पर क्यों इस तरह एक बयान बिल्कुल कोई प्रभाव नहीं पड़ा समाचार समूह में सवाल और मंचों का एक बहुत पैदा कर रहा होगा ...)
संपत्ति सेट करने के लिएThickness m = MyControl.Margin;
m.Left = 10;
MyControl.Margin = m;
, बस एक Thickness
संरचना बना सकते हैं और उन्हें एक बार में सेट आप सभी मार्जिन सेट करने के लिए जा रहे हैं: आप Margin
संपत्ति से Thickness
संरचना प्राप्त करने के लिए मान सेट और इसे वापस स्टोर की आवश्यकता होगी,:
MyControl.Margin = new Thickness(10, 10, 10, 10);
धन्यवाद, अच्छा। वास्तविक प्रकार को देखने के लिए – MikeMalter
Thickness
आप बनाने की आवश्यकता का उपयोग करने के/अपनी परियोजना .NET framework
मंच संस्करण को बदल 4.5 तक। becaus यह विधि केवल संस्करण 4.5 में उपलब्ध है। (इसके अलावा आप केवल प्रस्तुतिफ्रेमवर्क.dll डाउनलोड कर सकते हैं और अपने .NET framework
संस्करण को 4.5 के बिना बना/बदलकर इस डीएलएल को संदर्भित कर सकते हैं।)
लेकिन अगर आप इस सरल करना चाहते हैं, आप इस कोड का उपयोग कर सकते हैं:
MyControl.Margin = new Padding(int left, int top, int right, int bottom);
भी
MyControl.Margin = new Padding(int all);
यह सरल है और कोई जरूरत है अपनी परियोजना में कोई परिवर्तन
यह थोड़ा अस्पष्ट है कि आप क्या पूछ रहे हैं, लेकिन चीजों को आरामदायक बनाने के लिए, आप अपने नियंत्रण का वारिस कर सकते हैं और मार्क के सुझाव के साथ एक संपत्ति जोड़ सकते हैं:
class MyImage : Image {
private Thickness thickness;
public double MarginLeft {
get { return Margin.Left; }
set { thickness = Margin; thickness.Left = value; Margin = thickness; }
}
}
तो ग्राहक कोड में आप सिर्फ
MyImage img = new MyImage();
img.MarginLeft = 10;
MessageBox.Show(img.Margin.Left.ToString()); // or img.MarginLeft
ऐसी समस्या को हल करने के लिए विरासत का उपयोग कर? काफी बड़ा ओवरहेड, है ना? – LuckyLikey
@ लकीलाकी यह उपयोग के मामले पर निर्भर करता है: यदि आप परियोजना में कई स्थानों पर 'मर्जिन लाइफ्ट' को बदलने की योजना बनाते हैं, तो विरासत डिज़ाइन समस्याओं से बचाता है। बेशक, अगर यह आपकी परियोजना में एक ही जगह है, तो मैं स्वीकृत उत्तर चुनूंगा। –
एक बस इस
MyControl.Margin = new System.Windows.Thickness(10, 0, 5, 0);
स्थिति पर निर्भर करता है, आप भी यहाँ गद्दी संपत्ति का उपयोग कर कोशिश कर सकते हैं इस्तेमाल कर सकते हैं लिख सकते हैं ...
MyControl.Margin=new Padding(0,0,0,0);
कुडोस ... मैं 'var' - अहमद के साथ धोखा देने के लिए कबूल करता हूं, क्षमा करें; मेरा मतलब है "उपयुक्त भाषा सुविधा का उपयोग करना"; -पी –
इससे मदद मिली कि त्रुटि संदेश में पूरी तरह से योग्य प्रकार का नाम शामिल है। एमएसडीएन के लिए एक त्वरित बुकमार्क के साथ, मुझे सही पृष्ठ पर जाने के लिए पता बार पर "msdn System.Windows.FrameworkElement.Margin" की आवश्यकता है ... –
संयोग से हुह? ;) – zvolkov