[VS2010] WPF 4.0 新功能:文字堆疊 (Text Stack) 的強化

[VS2010] WPF 4.0 新功能:文字堆疊 (Text Stack) 的強化

WPF 在 .NET Framework 3.0 推出的時候,雖然它的 Programming Model 以及使用 XAML 定義應用程式介面的能力讓大家眼睛為之一亮,但是它卻有一個先天性的缺點:文字顯示能力與現有應用程式介面差異太大的問 題,在 WPF 3.0 時,所有在 WPF 中的文字都必須要以 Clear Type 字型來顯示,因此總是會有一點出入,尤其是在非英文版的作業系統中,會讓非英文的字型顯示出現一些奇怪的視覺變化(會覺得糊糊的),而這個問題在 Visual Studio 2010 Beta 1 也曾經出現過:

 

 

 

(以上圖片來源:http://social.msdn.microsoft.com/Forums/zh-TW/230/thread/c0ac5051-e307-44f2-b5bf-ceddd9baf99f)

 

到了 Beta 2 時,這個問題已經完全改善,而 RC 版本速度更加快了:

 

image

 

這是因為 WPF 4.0 在文字的繪製上增加了與 GDI+ 文字繪製引擎相容的功能,WPF 會自動尋找字型中有沒有內嵌的 bitmap 字型,如果有的話會將它繪製出來,而不是只以 Clear Type 方式繪製,我們可以比較下面這張圖中的兩排文字:

 

image

 

上面的是用 Clear Type 繪製的文字,有一種糊糊的感覺,下面的則是用 embedded bitmap 繪製的文字,看起來就十分正常,也因為有了這個功能,Visual Studio 2010 Beta 2 起文字糊糊的問題就幾乎都解決了。同時 WPF 4.0 的文字繪製模式新增了由系統指定的功能,開發人員可以利用在 System.Windows.Media 命名空間中的 TextRenderingMode 來設定要使用哪一種文字繪製的方式,目前支援的有:

  • TextRenderingMode.Auto:由系統指定。
  • TextRenderingMode.Aliased:以位元方式處理消除鋸齒的效果。
  • TextRenderingMode.Grayscale:以灰度方式消除鋸齒的效果。
  • TextRenderingMode.ClearType:以 Clear Type 字型來繪製文字 (未設定為 Auto 或未設定 TextRenderingMode 時,以此為預設值)。

 

另外,前面提到的 GDI+ 相容繪製的模式,則是由 System.Windows.Media 中的 TextFormattingMode 來決定:

  • Display:啟用 GDI+ 相容字型繪製與度量模式。
  • Ideal:啟用 Ideal 字型繪製與度量模式 (WPF 一開始用的模式)。

 

例如下面的 XAML 程式碼:

 

image

 

我們可以看出它們繪製出來的效果:

 

image

 

同時,前面提到 TextFormattingMode 會影響到文字的度量 (大小的設定),因此在比較長的文章輸出時,不同的 TextFormattingMode 會有截然不同的結果:

 

image

 

順帶一提,前面所提到的東亞文字繪製問題,系統預設具有 embedded bitmap 的字型只有(台灣是新細明體):

 

image

 

參考資料;

WPF 4 Text Stack Improvements