Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ComponentOne for WPF: Text seems to render in the incorrect position?

I’m running into problems when rendering text on my document. Specifically, the text renders too low. I tried filling a rectangle behind the text to see what happens, and I discovered that they appear to render slightly offset:

Offset text from background using the same rectangle.

Here’s the code I used to render the box and text:

_doc.FillRectangle(Colors.LightGray, 36, 72, 37.344, 9);
_doc.DrawString("Lorem", new Font("Arial", 12), Colors.Black, 
   new Rect(36, 72, 37.344, 9));

I know that the height of the rectangle (9) doesn’t appear to match the height of the font (12), which I thought might have been the problem at first. However, I then did a MeasureString on the font itself and discovered that its height was actually 9 rather than 12 (I used the immediate window for this, which is why it's a pic and not a text block):

Results of the Immediate Window calling MeasureString.

Any ideas as to what could be causing it and how to avoid it?

Thanks!

-Ari

like image 515
Ari Roth Avatar asked Nov 26 '25 19:11

Ari Roth


1 Answers

  • There are couple of posts that discuss the WPF text rendering inconsistencies.

  • One of the other posts: WPF Text rendering problem, stated that SnapToDevicePixels could ruin text rendering if text has been resized to display across pixels. The suggested answer was to keep,

    SnapToDevicePixels = True on borders/backgrounds but turn it off for text elements.

  • As for the current method your are using. Please take a look at one of my earliers posts: Increase bar chart values with button clicks : I have used DrawString() to add a letter within a rectangle. All drawing is done in a Panel.

code: ...

   panel1.Paint += new PaintEventHandler(panel1_Paint);

        using (Graphics g = this.panel1.CreateGraphics())
        {
            Brush brush = new SolidBrush(Color.Green);
            g.FillRectangle(brush, px, py, 20, 20);                           
            Pen pen = new Pen(new SolidBrush(Color.White));
            g.DrawRectangle(pen, px, py, 20, 20);                    

            //add each total5Click into chart block
            g.DrawString((total5Times).ToString(), new Font("Arial", 7), 
            new SolidBrush(Color.AntiqueWhite),
            px + 1, py+8, StringFormat.GenericDefault);
            pen.Dispose();}
    ...
like image 186
bonCodigo Avatar answered Nov 28 '25 13:11

bonCodigo



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!