問題剛剛出現時當時還在wpf3.5,百度+谷歌都沒有太多的信息,倒是在微軟的社區里有人提問,但沒有好的解決方案。初步嘗試關閉硬件加速功能。
關閉硬件加速有兩種辦法,一是設置注冊表值。
即新建HKEY_CURRENT_USER\SOFTWARE\Microsoft\Avalon.Graphics\DisableHWAcceleration項,設置為1關閉加速。但注冊表是系統全局設置,嘗試軟件設置。
即在軟件運行開始判斷系統圖形能力,設置是否開啟加速:
case Partical:
case SoftOnly:
RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;
break;
case Full:
RenderOptions.ProcessRenderMode = RenderMode.Default;
break;
}
這里有一個微調,即使系統認為能部分開啟硬件加速條件也使其關閉。其中注冊表設置優先於程序設置,也就是注冊表設置了關閉,軟件中是開啟不來的。
嘗試后問題沒有解決,倒是測試提的幾個界面錯亂或者穿過軟件顯示桌面的bug沒有再現了。是因為測試的機器顯卡都比較爛,大多又沒有裝好正確的顯卡驅動,關閉硬件加速后界面正常。
解決思路二:
在窗口或控件上設置字體屬性就可以了,如下:
以下是代碼片段: <UserControl x:Class="OPClient.PlatformManage.UserControlProxy" 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"> |
WPF4字體改善
WPF4對字體渲染做了很大的改善,增加了TextOptions屬性,該屬性可以設置TextFormattingMode,TextRenderingMode,TextHintingMode
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.WPF4.0中同時針對東亞字體的渲染進行了優化,現在它支持點陣字體了,而開啟這個新特性十分簡單,只需為FontFamily設置一種點陣字體就可以了
以下是一張推薦設置表 LanguageFont
Language |
Font |
Traditional Chinese |
MingLiu |
Simplified Chinese |
SimSun |
Japanese |
MS Gothic |
Korean |
Gulium |
Korean |
Batang |