2011-02-03 14 views
7

क्या UIElement का आकार प्राप्त करने का कोई तरीका है जो स्मृति में रहता है और अभी तक प्रस्तुत नहीं किया गया है?डब्ल्यूपीएफ - मेमोरी में UIElement का आकार प्राप्त करें?

मेरे पास वर्तमान में एक दिनचर्या है जो को DataTable से बनाता है और फिर ग्रिड को FixedDocument में जोड़ता है। मुझे Grid के आकार को जानने की आवश्यकता है क्योंकि यदि आवश्यक हो तो मैं स्वचालित रूप से पोर्ट्रेट से लैंडस्केप में स्विच करना चाहता हूं; या यहां तक ​​कि ग्रिड के FontSize को भी बदलें।

उत्तर

16

आपको आइटम को प्रस्तुत करने की आवश्यकता है, या आइटम को प्रस्तुत करने की प्रतीक्षा करें। फिर आप ActualHeight और ActualWidth गुणों का उपयोग कर सकते हैं।

बाध्य करने के लिए एक प्रस्तुत करना: इस उदाहरण MenuItem में

MenuItem item = new MenuItem(); 
    item.Header = "bling"; 
    item.Icon = someIcon; 
    //Force render 
    item.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity)); 
    item.Arrange(new Rect(item.DesiredSize)); 

एक स्पष्ट ऊंचाई या चौड़ाई नहीं दिया गया है। हालांकि, रेंडर को मजबूर करने से इसे आपूर्ति किए गए हेडर टेक्स्ट और आइकन को ध्यान में रखा जाएगा।

+0

'MenuItem' मेरे लिए काम नहीं करता था, लेकिन' स्टैकपैनेल 'या' व्यूबॉक्स 'ने किया था। – vossad01

+0

कक्षा 'UIElement' पर 'ActualWidth' नामक कोई संपत्ति नहीं है :-( – Boris

+0

हाँ, यह मेरे लिए काम करता है। हाँ, यह मेरे लिए काम करता है ..... –

1

यदि आप एक स्पष्ट Width या Height सेट हैं तो आप केवल यह निर्धारित कर सकते हैं। फिर भी, परिदृश्य के आधार पर, यह समय प्रस्तुत करने में बदल सकता है, क्योंकि लेआउट पास तब तक नहीं होगा जब तक इसे प्रस्तुत नहीं किया जाता है, और ActualWidth/ActualHeight सेट हो जाता है।

+0

तो मेरा एकमात्र विकल्प अलग-अलग फ़ॉन्ट आकार और पेज लेआउट का उपयोग करके नियंत्रण को बार-बार प्रस्तुत करना है जब तक यह फिट न हो जाए? –

+0

@ सोनी: वह, या इसे किसी अन्य स्थान पर प्रस्तुत करें ... आप इसे "स्क्रीन से बाहर" प्रस्तुत करने का प्रयास करने के लिए हमेशा RenderTargetBitmap आदि का उपयोग कर सकते हैं और फिर समायोजित कर सकते हैं, अगर आप इसे उपयोगकर्ता नहीं देखना चाहते हैं। .. –

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