silverlight 中文字體問題 解決字體粗細不均,字體花的問題

silverlight中的字體問題  解決字體花的問題
問題描述: 在Silverlight中顯示中文時默認爲微軟雅黑,11號字體,但是在11號字體在有的機器上顯示很花,粗細不一致。

解決方法:

第一種:在每個窗體中更目錄中設置字體爲12號

第二種:修改字體爲宋體或其他可以字體,此種解決方法可以參考此篇博客

 

http://www.cnblogs.com/wallis0922/archive/2010/10/14/1851791.html

問題描述

在Silverlight程序中,對文字設置了中文字體之後不起任何作用。

問題分析

Silverlight內置了十幾種常見拉丁字體,如Arial,Comic Sans MS,Courier New,Lucida Sans Unicode等。默認使用的字體是Portable User Interface。這是一種複合字體,Silverlight會根據文字的語言選擇最佳的字體。但是,這種字體通常在顯示中文的時候非常難看。下圖是默認的顯示效果:

image

所以,我們需要在程序中手動指定文字的字體。

三種字體引用方式

如果使用的字體是Silverlight內置支持的,那麼無需做任何配置,直接指定FontFamily即可。內置的字體有Arial,Arial Black,Comic Sans MS,Courier New,Lucida Sans Unicode,Times New Roman,Georgia,Trebuchet MS,Verdana和Webdings。使用這些字體不依賴於客戶端操作系統。

同時Silverlight也支持引用本地系統一部分字體(注意,不是全部本地字體都支持)。如Segoe UI,Symbol,Tahoma,宋體,等等。使用這些字體需要注意,其他客戶端系統中可能不存在這些字體,如英文操作系統一般沒有宋體。那麼如果你使用了宋體那就會有問題。

如果你需要讓Silverlight應用程序在不同系統下都有一致的字體,或者你想用某些字體,但是這些字體不支持本地引用(如隸書),那麼Silverlight允許你將字體文件打包到應用程序中,可以放在Xap包中,也可以放在ClientBin目錄下,然後在代碼中動態下載並引用這些字體文件。這樣犧牲的代價就是Xap包會變得較大。

爲了更好顯示中文,我需要爲上面的文字顯式指定使用“宋體”。代碼如下:

<Grid x:Name="LayoutRoot" Background="White">    <TextBlock Text="Hello,測試中英文混合顯示效果" FontSize="26" FontFamily="宋體"/></Grid>

Ctrl+F5運行,卻發現字體沒有發生明顯的變化。說明字體的設置不起作用。我又測試了一下將宋體打包到應用程序中。爲了簡單,我使用Blend3幫我自動完成這個操作。

Blend 3中字體打包

選中一種字體之後,勾選字體面板下面的Embed複選框即可將指定字體打包到Silverlight工程中去。這個時候工程中自動生成了Fonts文件夾,裏面放置了宋體這個字體文件。

Visual Studio 打包字體

同時,Xaml也發生了變化,由引用系統的宋體改成引用Fonts.zip包中的宋體了。如下:

<Grid x:Name="LayoutRoot" Background="White">    <TextBlock Text="Hello,測試中英文混合顯示效果" FontSize="26" FontFamily="Fonts/Fonts.zip#宋體"/></Grid>

運行結果發現字體依舊。

後來查閱Silverlight官方文檔的時候,看到字體列表一節時,突然想到,是不是因爲字體名不規範?不能直接使用“宋體”,而應該使用Simsun。趕緊測試了一下,發現果然是這個問題。只需將上面兩個示例代碼中的宋體改成Simsun即可正確顯示出宋體的效果來。

image

後來又測試了一下其它中文字體,如微軟雅黑,如果直接這樣寫中文的話是顯示不出來的,一定要寫“Microsoft YaHei”。可惡的Blend,幫我自動生成的代碼居然有這種莫名其妙的錯。不知道這算是Silverlight和Blend的Bug還是設計使然。

總結

在Silverlight中,如果要引用字體,一定不能直接寫上中文,否則不起任何作用。如果你是在英文操作系統下的話,你可以打開字體文件(C:/windows/fonts文件夾下,Silverlight支持ttf,odttf和otf這幾種後綴的字體文件),其中的字體名稱一欄就是FontFamily所使用的名稱。只是在中文操作系統下,支持中文的字體在這裏會顯示爲中文名,而不是英文名。

FontFamily

常見中文字體名和英文字體名的對應關係如下:

常見中文字體與FontFamily映射表
宋體(英文不等寬) Simsun
宋體(英文等寬) NSimsun
楷體 KaiTi
黑體 SimHei
仿宋 FangSong
微軟正黑體 Microsoft JhengHei
細明體 MingLiu
微軟雅黑 Microsoft YaHei
隸書 LiSu(只能打包,不支持本地系統引用)
華文彩雲 STCaiyun(只能打包,不支持本地系統引用)
華文琥珀 STHupo(只能打包,不支持本地系統引用)
華文隸書 STLiti(只能打包,不支持本地系統引用)
華文新魏 STXinwei(只能打包,不支持本地系統引用)
華文行楷 STXingkai(只能打包,不支持本地系統引用)
幼圓 YouYuan(只能打包,不支持本地系統引用)

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章