2009-12-09 12 views
18

मैं नहीं समझ सकता क्यों यह काम नहीं करता प्रस्तुत करना, या क्या मैं यह काम करने के लिए मिल की जरूरत है।गुप्त WPF तत्व बनाएं और बिटमैप को

, repro एक सरल WPF आवेदन बना सकते हैं और मुख्य विंडो के निर्माता thusly प्रतिस्थापित करने के लिए:

public MainWindow() 
    { 
     InitializeComponent(); 

     // simple visual definition 
     var grid = new Grid { Width = 300, Height = 300 }; 
     var text = new TextBlock 
         { 
         Text = "Y DON'T I WORK???", 
         FontSize = 100, 
         FontWeight = 
         FontWeights.Bold 
         }; 
     grid.Children.Add(text); 

     // update the layout so everything is awesome cool 
     grid.Measure(grid.DesiredSize); 
     grid.Arrange(new Rect(grid.DesiredSize)); 
     grid.UpdateLayout(); 

     // create a BitmapSource from the visual 
     var rtb = new RenderTargetBitmap(
            (int)grid.Width, 
            (int)grid.Height, 
            96, 
            96, 
            PixelFormats.Pbgra32); 
     rtb.Render(grid); 

     // Slap it in the window 
     this.Content = new Image { Source = rtb, Width = 300, Height = 300 }; 
    } 

यह एक खाली छवि का परिणाम है। अगर मैं आरटीबी को डिस्क पर पीएनजी के रूप में सहेजता हूं तो इसका सही आकार लेकिन पारदर्शी होता है।

अगर, हालांकि, मैं इस एक दृश्य है कि स्क्रीन पर प्रदर्शित किया गया है के साथ क्या है, यह ठीक काम करता है।

मैं एक दृश्य मैं एक बिटमैप के लिए गुप्त का निर्माण किया गया है प्रदान कर सकते हैं कैसे?

उत्तर

24

जब तक आप उन्हें मापने क्योंकि तत्व एक इच्छित आकार नहीं है। आप 0x0 के उपलब्ध स्थान के साथ ग्रिड को आकार देने के लिए कह रहे थे। अपने कोड को बदलने के लिए:

grid.Measure(new Size(grid.Width, grid.Height)); 
grid.Arrange(new Rect(new Size(grid.Width, grid.Height))); 

(। UpdateLayout करने के लिए कॉल अनावश्यक है)

+1

एक का बेटा ........ मैं DesiredSize जाँच एक बार जिस तरह से वापस जब मैं यह पूरा करने के प्रयास करने के लिए शुरू कर दिया और यह 0,0 नहीं था (कौन जानता है क्यों) और इसे फिर से जांच नहीं किया। धन्यवाद! – Will

+2

हम सिर्फ पता चला यदि आप नियंत्रण आप प्रतिपादन कर रहे हैं अंदर अपनी ItemsSources करने के लिए बाध्य ItemsControls है गुप्त ऐसा लगता है कि यह है कि आप कॉल करने के लिए 'UpdateLayout()' या वे किसी भी आइटम प्रस्तुत करना नहीं है की क्या ज़रूरत है। –

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