打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
解决Silverlight引用中文字体的问题 | 简单生活 — Kevin Yang的博客
解决Silverlight引用中文字体的问题
SilverlightSilverlight,中文字体,字体,字体打包,引用,本地字体
问题描述
在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(只能打包,不支持本地系统引用)
——Kevin Yang
你可能对下面的文章感兴趣
Blend小贴士——改变鼠标滚轮的默认行为
Silverlight 2 RTM 多国语言支持(应用程序本地化)
Silverlight 2动态加载Xap包中的程序集
Silverlight 4+RIA Services–搜索引擎优化(SEO)
Silverlight SEO(搜索引擎优化)白皮书
Silverlight2 动态加载程序集—OnDemand模式(Dynamic Load Assembly)
Silverlight中无法设置卫星程序集为中立资源程序集
Silverlight启用Assembly Caching之后铁通用户无法访问
Silverlight的依赖属性与附加属性
图片等资源的引用路径问题
解决Silverlight无法调试的问题
一句话博客2009-09-15
本博客遵循CC协议2.5,即署名-非商业性使用-相同方式共享
写作很辛苦,转载请注明作者以及原文链接~
如果你喜欢我的文章,你可以订阅我的博客:-D点击订阅我的文章
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
中文标准web字体
OpenERP PyChart 中文报表模块(支持CJK语言)
轻松,100%成功替换Win7宋体为XP宋体
如何将微软雅黑设置成XP的默认字体?
win10下rdlc报表在vs(visual studio)中中文显示小方块的批量处理解决方法
Debian安装及输入法等简单配置
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服