解决Silverlight引用中文字体的问题

一:问题出现的原因:

Silverlight 默认选择微软雅黑作为中文显示字体,若操作系统为英文操作系统(没有安装微软雅黑字体时),silverlight的中文字体会显示成如下花白的设备字体的形式。

为使各个环境下silverlight都显示相同的字体,我们需要在程序中手动指定文字的字体。

 

二:问题解决步骤:

Silverlight3环境:

1:建立silverlight项目,建立textblok等文字显示控件。

2:在blend3中为控件设置字体样式:

选中一种字体之后,勾选字体面板下面的Embed复选框即可将指定字体打包到Silverlight工程中去。这个时候工程中自动生成了Fonts文件夹,里面放置了宋体这个字体文件。

 

3:修改自动生成代码中的字体名称(如宋体改为SimSun);

如上操作即可打包silverlight显示字体。

Silverlight4环境:

Silverlight下已更正打包时字体名称中文显示的问题,无须修改字体名称。

三:问题分析及解决问题过程:

Silverlight存在三种字体引用方式:

如果使用的字体是Silverlight内置支持的,那么无需做任何配置,直接指定FontFamily即可。内置的字体有ArialArial BlackComic Sans MSCourier NewLucida Sans UnicodeTimes New RomanGeorgiaTrebuchet MSVerdanaWebdings。使用这些字体不依赖于客户端操作系统。

同时Silverlight也支持引用本地系统一部分字体(注意,不是全部本地字体都支持)。如Segoe UISymbolTahoma,宋体,等等。使用这些字体需要注意,其他客户端系统中可能不存在这些字体,如英文操作系统一般没有宋体。那么如果你使用了宋体那就会有问题。

如果你需要让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”Blend3帮我自动生成的代码居然有这种莫名其妙的错(blend4已修正)。

四:问题总结

Silverlight中,如果要引用字体,一定不能直接写上中文名称,否则不起任何作用。如果你是在英文操作系统下的话,你可以打开字体文件(C:\windows\fonts文件夹下,Silverlight支持ttf,odttfotf这几种后缀的字体文件),其中的字体名称一栏就是FontFamily所使用的名称。只是在中文操作系统下,支持中文的字体在这里会显示为中文名,而不是英文名。

常见中文字体名和英文字体名的对应关系如下:

常见中文字体与FontFamily映射表

宋体(英文不等宽)

Simsun

宋体(英文等宽)

NSimsun

楷体

KaiTi

黑体

SimHei

仿宋

FangSong

微软正黑体

Microsoft JhengHei

细明体

MingLiu

微软雅黑

Microsoft YaHei

隶书

LiSu(只能打包,不支持本地系统引用)

华文彩云

STCaiyun(只能打包,不支持本地系统引用)

华文琥珀

STHupo(只能打包,不支持本地系统引用)

华文隶书

STLiti(只能打包,不支持本地系统引用)

华文新魏

STXinwei(只能打包,不支持本地系统引用)

华文行楷

STXingkai(只能打包,不支持本地系统引用)

幼圆

YouYuan(只能打包,不支持本地系统引用

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值