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會根據文字的語言選擇最佳的字體。但是,這種字體通常在顯示中文的時候非常難看。下圖是默認的顯示效果:
所以,我們需要在程序中手動指定文字的字體。
三種字體引用方式
如果使用的字體是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幫我自動完成這個操作。
選中一種字體之後,勾選字體面板下面的Embed複選框即可將指定字體打包到Silverlight工程中去。這個時候工程中自動生成了Fonts文件夾,裏面放置了宋體這個字體文件。
同時,Xaml也發生了變化,由引用系統的宋體改成引用Fonts.zip包中的宋體了。如下:
<Grid x:Name="LayoutRoot" Background="White"> <TextBlock Text="Hello,測試中英文混合顯示效果" FontSize="26" FontFamily="Fonts/Fonts.zip#宋體"/></Grid>
運行結果發現字體依舊。
後來查閱Silverlight官方文檔的時候,看到字體列表一節時,突然想到,是不是因爲字體名不規範?不能直接使用“宋體”,而應該使用Simsun。趕緊測試了一下,發現果然是這個問題。只需將上面兩個示例代碼中的宋體改成Simsun即可正確顯示出宋體的效果來。
後來又測試了一下其它中文字體,如微軟雅黑,如果直接這樣寫中文的話是顯示不出來的,一定要寫“Microsoft YaHei”。可惡的Blend,幫我自動生成的代碼居然有這種莫名其妙的錯。不知道這算是Silverlight和Blend的Bug還是設計使然。
總結
在Silverlight中,如果要引用字體,一定不能直接寫上中文,否則不起任何作用。如果你是在英文操作系統下的話,你可以打開字體文件(C:/windows/fonts文件夾下,Silverlight支持ttf,odttf和otf這幾種後綴的字體文件),其中的字體名稱一欄就是FontFamily所使用的名稱。只是在中文操作系統下,支持中文的字體在這裏會顯示爲中文名,而不是英文名。
常見中文字體名和英文字體名的對應關係如下:
常見中文字體與FontFamily映射表 | |
宋體(英文不等寬) | Simsun |
宋體(英文等寬) | NSimsun |
楷體 | KaiTi |
黑體 | SimHei |
仿宋 | FangSong |
微軟正黑體 | Microsoft JhengHei |
細明體 | MingLiu |
微軟雅黑 | Microsoft YaHei |
隸書 | LiSu(只能打包,不支持本地系統引用) |
華文彩雲 | STCaiyun(只能打包,不支持本地系統引用) |
華文琥珀 | STHupo(只能打包,不支持本地系統引用) |
華文隸書 | STLiti(只能打包,不支持本地系統引用) |
華文新魏 | STXinwei(只能打包,不支持本地系統引用) |
華文行楷 | STXingkai(只能打包,不支持本地系統引用) |
幼圓 | YouYuan(只能打包,不支持本地系統引用)
|