oxyplot 圖表控件功能強大,使用很普遍。最近考慮到性能使用OxyPlot.SkiaSharp替代OxyPlot.WPF,曲線圖表初步測試,性能提高近10倍左右。基於SkiaSharp圖形引擎的一些控件常碰見中文亂碼的問題,因此改用OxyPlot.SkiaSharp時也有內心準備。默認狀況下中文顯示真成了亂碼。以下圖所示。性能
因而翻了遍OxyPlot.SkiaSharp源碼,看到PlotModel中的DefaultFont屬性默認值是「Segoe UI」,西文無襯線體。試着改成「微軟雅黑」,中文顯示正常了。以下圖所示。測試
OxyPlot.WPF中爲何顯示沒問題,將WPF中TextBlock字體改成ALGERIAN後,只有英文應用了該字體,而中文則是以另一種字體顯示的。以下圖所示。字體
咱們知道WPF的默認字體也是「Segoe UI」,爲何顯示不會有問題呢,這就要提到WPF應用字體的機制了。code
WPF應用程序使用屬性FontFamily、FontStyle、FontWeight、FontStretch和FontSize來指定它想要的字體。 在運行時,WPF會決定在應用程序運行的目標系統上使用準確的字體。這個決定是基於將前四個屬性(暫時忽略FontSize)與該系統上安裝的物理字體文件進行匹配。blog
WPF首先將提供的FontFamily與系統中找到的字體名稱進行匹配。 而後,它試圖找到一個與所請求的FontStretch、FontStyle和FontWeight屬性值最接近的字體。 匹配FontStretch是最高優先級,其次是FontStyle,而後是FontWeight。源碼
若是WPF找不到匹配的字體,它就會「退回」到與WPF一塊兒安裝的默認字體,即it
C:\Windows\Fonts\GlobalUserInterface.CompositeFont
這是一種複合字體,它試圖將單個字符映射到系統上可能存在的字體。也就是說中文和英文是分開映射到不一樣的字體上。亂碼