2010-08-31 10 views
7

हमारे एप्लिकेशन में कैनवास पर कई ऑब्जेक्ट हैं; कैनवास स्क्रॉल व्यूअर में निहित है। हमारे पास एक स्लाइडर नियंत्रण और कुछ बटन भी हैं, जो हमेशा खिड़की के शीर्ष पर केंद्रित होते हैं।
मैं ऐप के बिटमैप को कैप्चर करके एप्लिकेशन को प्रिंट करने का प्रयास कर रहा हूं, लेकिन बिना किसी 'सजावट' - स्लाइडर, बटन या स्क्रॉल बार के।एसएल 4 - दृश्य पेड़ की फोर्स रीड्रा

 _scrollViewer.HorizontalScrollBarVisibility = ScrollBarVisibility.Hidden; 
     _scrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Hidden; 
     var s = xSlider; 
     s.Visibility = Visibility.Collapsed; 
     var b = xPlusButton; 
     b.Visibility = Visibility.Collapsed; 
     b = xMinusButton; 
     b.Visibility = Visibility.Collapsed; 

     b = xButton; 
     b.Visibility = Visibility.Collapsed; 

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

किसी भी सुझाव के लिए धन्यवाद ....

+0

क्या आप कैनवास के Xaml को दिखा सकते हैं जिसे आप प्रिंट कर रहे हैं? "बिटमैप कैप्चरिंग" टिप्पणी थोड़ा सा लगता है, क्या आप eloborate कर सकते हैं? – AnthonyWJones

+0

मैं वास्तव में xaml नहीं दिखा सकता, क्योंकि सभी ऑब्जेक्ट रनटाइम पर जोड़े जाते हैं, और टेम्पलेट्स का भारी उपयोग करते हैं। मेरा मानना ​​है कि यह शरारत पैदा करने वाले टेम्पलेट्स हैं; कैनवास को प्रिंट डॉक्यूमेंट में पास करने के बाद, पेड़ कभी नहीं खींचा जाता है (कम से कम पूरी तरह से नहीं)। प्रिंट आउटपुट के रूप में क्या दिखाई देता है, बहुत सारी गायब या अपूर्ण रूप से खींची गई वस्तुएं होती हैं। हम अपूर्ण रूप से खींचे गए ऑब्जेक्ट समस्या को प्राप्त करने के लिए कैनवास के बिटमैप को कैप्चर करने का प्रयास कर रहे हैं। – Number8

+0

क्या आप अपना कोड कैप्चरिंग बिटमैप पोस्ट कर सकते हैं? –

उत्तर

7

कोशिश के बाद,

canvas.InvalidateMeasure(); 
canvas.InvalidateArrange(); 

आप वैकल्पिक रूप से WritableBitmap उपयोग कर सकते हैं क्रम छवि पर कब्जा और छवि भेजने के लिए दस्तावेज़ मुद्रित करने के लिए करता है, तो मामले प्रिंट में दस्तावेज़ को बदलने रेंडर अनदेखी कर रहा है ।

यदि आप तत्व को कैप्चर करने के लिए WritableBitmap का उपयोग कर रहे हैं तो आपको रेंडरट्रांसफॉर्म को दूसरे तर्क के रूप में देना चाहिए। क्या आप स्क्रीन को कैप्चर करने के लिए अपना कोड पोस्ट कर सकते हैं?

+0

अगर यह आपकी मदद करता है तो कृपया इसे उत्तर के रूप में चिह्नित करें। –

+0

+1 इसे सही करने के लिए +1! यह वही था जो मुझे LayouUpdated घटना को आग लगाने के लिए मजबूर करने की आवश्यकता थी। – dFlat

2

अकाल द्वारा सुझाए गए अमान्य मेटा और अमान्य आर्टेंज विधियों के अतिरिक्त, आप UpdateLayout विधि को आजमा सकते हैं।

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

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

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