资源描述:
《解决silverlight引用中文字体的问题》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、解决Silverlight引用中文字体地问题解决Silverlight引用中文字体地问题本文来自KevinYang博客作者:KevinYang问题描述在Silverlight程序中,对文字设置了中文字体之后不起任何作用.问题分析Silverlight内置了十几种常见拉丁字体,如Arial,ComicSansMS,CourierNew,LucidaSansUnicode等.默认使用地字体是PortableUserInterface.这是一种复合字体,Silverlight会根据文字地语言选择最佳地字体.
2、但是,这种字体通常在显示中文地时候非常难看.下图是默认地显示效果:所以,我们需要在程序中手动指定文字地字体.三种字体引用方式如果使用地字体是Silverlight内置支持地,那么无需做任何配置,直接指定FontFamily即可.内置地字体有Arial,ArialBlack,ComicSansMS,CourierNew,LucidaSansUnicode,TimesNewRoman,Georgia,TrebuchetMS,Verdana和Webdings.使用这些字体不依赖于客户端操作系统.同时Silv
3、erlight也支持引用本地系统一部分字体(注意,不是全部本地字体都支持).如SegoeUI,Symbol,Tahoma,宋体,等等.使用这些字体需要注意,其他客户端系统中可能不存在这些字体,如英文操作系统一般没有宋体.那么如果你使用了宋体那就会有问题.如果你需要让Silverlight应用程序在不同系统下都有一致地字体,或者你想用某些字体,但是这些字体不支持本地引用(如隶书),那么Silverlight允许你将字体文件打包到应用程序中,可以放在Xap包中,也可以放在ClientBin目录下,然后在代
4、码中动态下载并引用这些字体文件.这样牺牲地代价就是Xap包会变得较大.为了更好显示中文,我需要为上面地文字显式指定使用“宋体”.代码如下:Ctrl+F5运行,却发现字体没有发生明显地变化.说明字体地设置不起作用.我又测试了一下将宋体打包到应用程序中.为了简单,我使用Blend3
5、帮我自动完成这个操作.选中一种字体之后,勾选字体面板下面地Embed复选框即可将指定字体打包到Silverlight工程中去.这个时候工程中自动生成了Fonts文件夹,里面放置了宋体这个字体文件.同时,Xaml也发生了变化,由引用系统地宋体改成引用Fonts.zip包中地宋体了.如下:6、nts.zip#宋体"/>运行结果发现字体依旧.后来查阅Silverlight官方文档地时候,看到字体列表一节时,突然想到,是不是因为字体名不规范?不能直接使用“宋体”,而应该使用Simsun.赶紧测试了一下,发现果然是这个问题.只需将上面两个示例代码中地宋体改成Simsun即可正确显示出宋体地效果来.后来又测试了一下其它中文字体,如微软雅黑,如果直接这样写中文地话是显示不出来地,一定要写“MicrosoftYaHei”.可恶地Blend,帮我自动生成地代码居然有这种莫名其妙地错.不知道
7、这算是Silverlight和Blend地Bug还是设计使然.总结在Silverlight中,如果要引用字体,一定不能直接写上中文,否则不起任何作用.如果你是在英文操作系统下地话,你可以打开字体文件(C:windowsfonts文件夹下,Silverlight支持ttf,odttf和otf这几种后缀地字体文件),其中地字体名称一栏就是FontFamily所使用地名称.只是在中文操作系统下,支持中文地字体在这里会显示为中文名,而不是英文名.常见中文字体名和英文字体名地对应关系如下:常见中文字体与Fo
8、ntFamily映射表宋体(英文不等宽)Simsun宋体(英文等宽)NSimsun楷体KaiTi黑体SimHei仿宋FangSong微软正黑体MicrosoftJhengHei细明体MingLiu微软雅黑MicrosoftYaHei隶书LiSu(只能打包,不支持本地系统引用)华文彩云STCaiyun(只能打包,不支持本地系统引用)华文琥珀STHupo(只能打包,不支持本地系统引用)华文隶书STLiti(只能打包,不支持本地系统引用)华文新魏STXinwe