轉帖|其它|編輯:郝浩|2010-12-22 16:50:15.000|閱讀 2075 次
概述:Silverlight內置了十幾種常見拉丁字體,如Arial,Comic Sans MS,Courier New,Lucida Sans Unicode等。默認使用的字體是Portable User Interface。這是一種復合字體,Silverlight會根據文字的語言選擇最佳的字體。但是,這種字體通常在顯示中文的時候非常難看。本文主要介紹如何解決Silverlight設置中文字體的問題,希望對大家有幫助。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
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所使用的名稱。只是在中文操作系統下,支持中文的字體在這里會顯示為中文名,而不是英文名。
常見中文字體名和英文字體名的對應關系如下:
對于非中文操作系統的電腦,可能根本沒有安裝任何中文字體,因此這種方法不能解決根本問題。
Silverlight默認的字體設備字體:Portable User Interface,字號為11px,其實設備字體對中文支持得很好,只是字號小了一些,只要字號不小于11px就顯示得很清晰了。
記住一點,中文字體一般都很大,大家千萬別在自己的應用中嵌入中文,那樣會讓.xap猛增,應該盡量Silverlight使用內置字體。如果為了追求美觀非要用中文字體的話,最好用圖片來代替。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載