The difficulties with text rendering in WPF have been well documented elsewhere. However, every time I get a blurry button I can’t remember how to fix it. This brief post shows the usual solutions.
With small font sizes the default WPF text rendering can lead to text looking very blurry. This is particularly a problem on controls (e.g. text on buttons), where we often use small fonts.
In .Net 4 Microsoft finally gave us a solution to this problem, which is to set TextOptions.TextFormattingMode = “Display” (instead of “Ideal”). This snaps everything to the pixel grid. However, this mode doesn’t look good at large text sizes, so there’s no easy solution to this problem.
Other TextOptions are
1. TextHintingMode (Animated/Auto/Fixed)
This just tells the renderer to use smoother but less clear rendering for animated text. It won’t fix the blurry text problem for static text (which should have Auto or Fixed set).
2. TextRenderingMode (Aliased/Auto/ClearType/GrayScale).
Tells the renderer how to draw. This DOES affect blurriness. In particular using Aliased rather than the default Auto can be good at small sizes.
Effect of These Options
Below, with font size 12, the first line is the default (Ideal/Auto). This is quite blurry. The second line is Display/Auto (less blurry) and the third line is Display/Aliased (not at all blurry, but a bit jagged). The second two lines are the options usually used to fix the problem.
This is the same but at font size 24, which highlights the problem since now Ideal/Auto (the first line) probably is ideal: