- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
解决Silverlight引用中文字体的问题1
问题描述
在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=26FontFamily=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(只能打包,不支持本地系统引用) 华文新魏 STXin
文档评论(0)