/ / साइड इफेक्ट्स पेश किए बिना मैं तत्व को कैसे माप सकता हूं? - डब्ल्यूपीएफ, लेआउट, उपाय

साइड इफेक्ट्स पेश किए बिना मैं तत्व को कैसे माप सकता हूं? - डब्ल्यूपीएफ, लेआउट, उपाय

मैं इसे न्यूनतम आकार की आवश्यकताओं की गणना करने के लिए नियंत्रण कैसे कह सकता हूं लेकिन वर्तमान स्थिति या भविष्य के लेआउट पर इसका कोई प्रभाव नहीं पड़ता?

उदाहरण के लिए, कहें कि मेरे पास ग्रिड में एक स्टैकपैनल है। स्टैकपैनल की चौड़ाई ग्रिड की चौड़ाई के आकार तक फैली होगी। लेकिन मैं कुछ भी प्रभावित किए बिना StackPanels न्यूनतम चौड़ाई की गणना कैसे कर सकता हूं।

माप विधि को देखते हुए, यह कहता है "Updates the DesiredSize of a UIElement. Calling this method constitutes the first pass (the "Measure" pass) of a layout update."

तो इस दृष्टिकोण के दुष्प्रभाव हैं।

उत्तर:

जवाब के लिए 2 № 1

मुझे विश्वास नहीं है कि यह डब्ल्यूपीएफ में ऐसा करना संभव है। मैं वही क्षमता चाहता हूं (एक पूर्ण माप को प्रेरित करने / पास करने के लिए बाध्यता को मापने के लिए।

एक प्रयोग मैंने किया था वर्तमान को बचाने के लिएवांछित आकार, फिर अमान्यateMeasure के बाद UpdateLayout और फिर मापें और DesiredSize को देखो। फिर पुराने / सहेजे गए आकार के साथ इसे फिर से सेट करें। दुर्भाग्य से यह धीमा है और हमारे एप्लिकेशन में एक बुरा दुष्प्रभाव है जो कि अद्यतनLayout () लेआउट घटनाओं को संसाधित करने के लिए इवेंट लूप चलाएगा। इसके परिणामस्वरूप अन्य, असंबद्ध कतारबद्ध घटनाओं की पुनर्वितरण और प्रसंस्करण हो सकती है, जिसे मापने के काम पूरा होने तक मैं उम्मीद नहीं कर रहा था। कैओस ensues। संक्षेप में, यह आईएमओ डब्ल्यूपीएफ में एक डिजाइन निर्णय (दोष?) है। मैंने एक खोला है UserVoice अनुरोध घटना प्रसंस्करण w / o लेआउट मापने की क्षमता के लिए अनुरोध। मैं भविष्यवाणी करता हूं "कभी नहीं होगा।

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


जवाब के लिए 0 № 2

आप माइक्रोसॉफ्ट उदाहरण द्वारा प्रदान किए गए कोड के आधार पर अपनी गणना कर सकते हैं। StackPanel: http://referencesource.microsoft.com/#PresentationFramework/Framework/System/Windows/Controls/Stack.cs,9ef706576207e5a6,references

हालांकि StackPanel अपने बच्चों के उपाय का उपयोग करता हैअपने स्वयं के वांछित आकार की गणना करने के लिए, इसलिए यह सब स्वयं की गणना करने के लिए एक संघर्ष हो सकता है। मुझे लगता है कि आपको अधिक जानकारी प्रदान करनी चाहिए कि आप वर्तमान स्थिति को क्यों प्रभावित नहीं करना चाहते हैं। UIElement के वांछित आकार को सेट करने में क्या गलत है?


जवाब के लिए 0 № 3

मुझे लगता है कि आप यहां हासिल कर सकते हैं सबसे अच्छा हैउपाय विधि। इसका दुष्प्रभाव होता है, लेकिन यदि आप इसे कई बार कहते हैं, तो केवल अंतिम स्थिति वैध रहती है। आपको दृश्य कलाकृतियों के बारे में चिंता करने की ज़रूरत नहीं है जैसे कि हम अस्थायी लेआउट को झुकाव करते हैं। केवल अंतिम ही प्रदान किया जाएगा।