2011-07-16 22 views
6

WPF4 में, या GlyphRundrawingvisual के लिए 'Size' की गणना कैसे कर सकता हूं।wpf में स्वरूपित टेक्स्ट या ग्लाइफ्रुन के 'आकार' की गणना कैसे करें?

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

Using dc As DrawingContext = drawingvisual.RenderOpen      

       Dim ft As New FormattedText(...) 

       dc.DrawText(ft, New Point(0, 0)) 

       dc.Close() 

End Using 

उत्तर

6

एक बार जब आप FormattedText प्रारंभ कर दिया है, यह चौड़ाई और ऊंचाई सदस्यों को बताया कि इसकी वास्तविक गाया इसके मापदंडों को देखते हुए आकार के बराबर हैं। वास्तव में, मानकों को बदलने के लिए उन्हें तुरंत अपडेट हो जाता है, ई GlyphRun के लिए जी ,:

FormattedText ft = new FormattedText(cellString, CultureInfo.CurrentCulture, FlowDirection.LeftToRight, fontFace, fontSize, fontBrush); 
ft.Trimming = TextTrimming.CharacterEllipsis; 
double originalHeight = ft.Height; 
double width = ft.Width; 
ft.MaxTextWidth = bCellRect.Width; // Set the width to get a new height 
double height = ft.Height; 

संपादित करें: जब आप अपने GlyphRun बनाया आप पहले से ही यह अग्रिम चौड़ाई हर किरदार के लिए, दे दी है ताकि आप चौड़ाई के लिए उन जोड़ने । ऊंचाई प्राप्त करने के लिए, GlyphTypeface का उपयोग करें। बेसलाइन * फ़ॉन्टसाइज

+0

'ग्लाइफ्रुन' के बारे में क्या? – Code0987

+0

जब आपने अपना ग्लिफ्रुन बनाया है तो आपने इसे पहले से ही प्रत्येक वर्ण के लिए अग्रिम चौड़ाई दी है, इसलिए आप चौड़ाई के लिए उन्हें जोड़ते हैं। ऊंचाई प्राप्त करने के लिए, GlyphTypeface का उपयोग करें। बेसलाइन * फ़ॉन्ट आकार। –

+0

कृपया अपना उत्तर संपादित करें और इसके बारे में 'GlyphRun' जोड़ें। – Code0987

3

बस एक साइड नोट के रूप में: मैंने DrawingContext.DrawGlyphRun बनाम DrawingContext.DrawFormattedText का उपयोग करते समय लगभग 10x प्रदर्शन वृद्धि देखी है।

ग्लाइफ्रुन अच्छी तरह से प्रलेखित नहीं है, लेकिन एक बार जब आप this article पढ़ते हैं तो आपको यह समझने में सक्षम होना चाहिए कि यह कैसे काम करता है।