WPF4文字模糊不清晰、邊框線條粗細不一致的解決方法
軟件測試過程中發現在一臺1600*900的分辨率電腦上文字模糊,甚至某些個文字出現壓縮扭曲
經過實踐,發現按下面方法能解決一點問題:
在窗口或控件上設置字體屬性就可以了(紅色標註部分),如下:
<UserControl x:Class="..."
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="400" d:DesignWidth="800"
FontFamily="NSimSun" FontSize="14" TextOptions.TextFormattingMode="Display" TextOptions.TextRenderingMode="ClearType" TextOptions.TextHintingMode="Fixed" UseLayoutRounding="True"
註:TextOptions.TextHintingMode="Fixed" UseLayoutRounding="True" 必須加在窗口或控件上,否則寫在樣式裏無效
主要屬性的意義:
1.TextFormattingMode
它提供了兩種設置:
· Ideal —— WPF4之前的模式
· Display —— 新的模式,可以使字體顯示更清晰
(一般將TextFormattingMode設置為Display,可以提高字體顯示的清晰度)
2.TextRenderingMode
設置渲染模式,可以有以下設置:
Auto – This mode will use ClearType unless system settings have been set to specifically disable ClearType on the machine.
Aliased – No antialiasing will be used to draw text.
Grayscale – Grayscale antialiasing will be used to draw text.
ClearType – ClearType antialising will be used to draw text.
(一般用ClearType渲染出來的字體會比較平滑)
3.TextHintingMode
獲取或設置一個值,該值影響文本元素的呈現行為,這是一種性能優化方式,當您對文本元素的任何文本屬性進行動畫處理時,可以使用此方式。
此屬性的值采用以下兩種可能的值:
Animated 通過使用一個更高效、但視覺精確下降的平滑算法來針對動畫進行優化。(文本仍然是可讀的;精度損失並不嚴重。)
Fixed(默認值)使用的算法針對視覺上精確的字體平滑效果進行了優化,但當將動畫應用於字體元素的屬性時,可能導致性能問題以及抖動,尤其是對於 FontSize 或轉換/定位/投影。
(在需要對字體做一些動態效果,例如將字體縮放時,使用Animated能獲取較高的性能,但同時也影響了其顯示的清晰度)
4.UseLayoutRounding
獲取或設置一個值,該值確定對象及其可視化子樹的呈現是否應使用將呈現與整像素對齊的舍入行為。UserLayoutRounding為False,導致控件布局相對屏幕若不是整數則不會四舍五入,導致邊緣模糊。
最後:如果把‘宋體’、‘黑體’、‘微軟雅黑’這類字體設置成Times New Roman等英文字體,清晰度倒是明顯提升了。(親測有效)
WPF4文字模糊不清晰、邊框線條粗細不一致的解決方法