I have run into a very interesting situation. My goal is to display a radius ring on the map and label the very top of the radius ring.
I have created a class that inherits from TextStyle and overrides the DrawCore method. I have been able find the point that I want to center a text label. That point it the very top of the radius ring. I have been able to accurately convert that point from world cords to screen cords.
I have a few options for drawing the text. The first: canvas.DrawTextWithWorldCoordinate. I like this one because I do not have to convert my point into screen cords. However there is no overload that will accept a HaloPen or Mask. That makes the text difficult to read. Please see the attached image. (This sample is the top left.)
Another option for drawing the text. canvas.DrawText. This method has several overloads. It will accept a HaloPen and with a little bit of work I can convert my world cords into screen cords. This almost works for me. At 96 DPI it looks great. (Bottom Left Sample.) However when the DPI of the canvas changes the font does not scale correctly. (Top Right Sample.) I have tried to scale the font myself but when I do the text gets drawn in the wrong location. The higher the DPI the further UP the Y axis the text appears. (Bottom Right Sample.)
Summary: I need some way to draw text, in the correct location, with HaloPens or Masks, on a canvas with standard and non-standard DPI settings.