轉(zhuǎn)帖|其它|編輯:郝浩|2010-12-22 16:50:15.000|閱讀 2075 次
概述:Silverlight內(nèi)置了十幾種常見拉丁字體,如Arial,Comic Sans MS,Courier New,Lucida Sans Unicode等。默認(rèn)使用的字體是Portable User Interface。這是一種復(fù)合字體,Silverlight會根據(jù)文字的語言選擇最佳的字體。但是,這種字體通常在顯示中文的時候非常難看。本文主要介紹如何解決Silverlight設(shè)置中文字體的問題,希望對大家有幫助。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Silverlight內(nèi)置了十幾種常見拉丁字體,如Arial,Comic Sans MS,Courier New,Lucida Sans Unicode等。默認(rèn)使用的字體是Portable User Interface。這是一種復(fù)合字體,Silverlight會根據(jù)文字的語言選擇最佳的字體。但是,這種字體通常在顯示中文的時候非常難看。下圖是默認(rèn)的顯示效果:
所以,我們需要在程序中手動指定文字的字體。
三種字體引用方式
如果使用的字體是Silverlight內(nèi)置支持的,那么無需做任何配置,直接指定FontFamily即可。內(nèi)置的字體有Arial,Arial Black,Comic Sans MS,Courier New,Lucida Sans Unicode,Times New Roman,Georgia,Trebuchet MS,Verdana和Webdings。使用這些字體不依賴于客戶端操作系統(tǒng)。
同時Silverlight也支持引用本地系統(tǒng)一部分字體(注意,不是全部本地字體都支持)。如Segoe UI,Symbol,Tahoma,宋體,等等。使用這些字體需要注意,其他客戶端系統(tǒng)中可能不存在這些字體,如英文操作系統(tǒng)一般沒有宋體。那么如果你使用了宋體那就會有問題。
如果你需要讓Silverlight應(yīng)用程序在不同系統(tǒng)下都有一致的字體,或者你想用某些字體,但是這些字體不支持本地引用(如隸書),那么Silverlight允許你將字體文件打包到應(yīng)用程序中,可以放在Xap包中,也可以放在ClientBin目錄下,然后在代碼中動態(tài)下載并引用這些字體文件。這樣犧牲的代價就是Xap包會變得較大。
為了更好顯示中文,我需要為上面的文字顯式指定使用"宋體"。代碼如下:
<Grid x:Name="LayoutRoot" Background="White">
<TextBlock Text="Hello,測試中英文混合顯示效果" FontSize="26" FontFamily="宋體"/>
</Grid>
Ctrl+F5運行,卻發(fā)現(xiàn)字體沒有發(fā)生明顯的變化。說明字體的設(shè)置不起作用。我又測試了一下將宋體打包到應(yīng)用程序中。為了簡單,我使用Blend3幫我自動完成這個操作。
選中一種字體之后,勾選字體面板下面的Embed復(fù)選框即可將指定字體打包到Silverlight工程中去。這個時候工程中自動生成了Fonts文件夾,里面放置了宋體這個字體文件。
同時,Xaml也發(fā)生了變化,由引用系統(tǒng)的宋體改成引用Fonts.zip包中的宋體了。如下:
<Grid x:Name="LayoutRoot" Background="White">
<TextBlock Text="Hello,測試中英文混合顯示效果" FontSize="26"FontFamily="Fonts/Fonts.zip#宋體"/>
</Grid>
運行結(jié)果發(fā)現(xiàn)字體依舊。
后來查閱Silverlight官方文檔的時候,看到字體列表一節(jié)時,突然想到,是不是因為字體名不規(guī)范?不能直接使用"宋體",而應(yīng)該使用Simsun。趕緊測試了一下,發(fā)現(xiàn)果然是這個問題。只需將上面兩個示例代碼中的宋體改成Simsun即可正確顯示出宋體的效果來。
后來又測試了一下其它中文字體,如微軟雅黑,如果直接這樣寫中文的話是顯示不出來的,一定要寫"Microsoft YaHei"。可惡的Blend,幫我自動生成的代碼居然有這種莫名其妙的錯。不知道這算是Silverlight和Blend的Bug還是設(shè)計使然。
總結(jié)
在Silverlight中,如果要引用字體,一定不能直接寫上中文,否則不起任何作用。如果你是在英文操作系統(tǒng)下的話,你可以打開字體文件(C:\windows\fonts文件夾下,Silverlight支持ttf,odttf和otf這幾種后綴的字體文件),其中的字體名稱一欄就是FontFamily所使用的名稱。只是在中文操作系統(tǒng)下,支持中文的字體在這里會顯示為中文名,而不是英文名。
常見中文字體名和英文字體名的對應(yīng)關(guān)系如下:
對于非中文操作系統(tǒng)的電腦,可能根本沒有安裝任何中文字體,因此這種方法不能解決根本問題。
Silverlight默認(rèn)的字體設(shè)備字體:Portable User Interface,字號為11px,其實設(shè)備字體對中文支持得很好,只是字號小了一些,只要字號不小于11px就顯示得很清晰了。
記住一點,中文字體一般都很大,大家千萬別在自己的應(yīng)用中嵌入中文,那樣會讓.xap猛增,應(yīng)該盡量Silverlight使用內(nèi)置字體。如果為了追求美觀非要用中文字體的話,最好用圖片來代替。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:網(wǎng)絡(luò)轉(zhuǎn)載