在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所使用的名称。只是在中文操作系统下,支持中文的字体在这里会显示为中文名,而不是英文名。
附:常见中文字体名和英文字体名的对应关系
分享到:
相关推荐
本文将深入探讨Silverlight跨域访问的问题,以及如何有效地解决它。 首先,理解Silverlight的同源策略是至关重要的。如同JavaScript一样,Silverlight也遵循同源策略,这意味着它只能访问与包含它的HTML页面来自...
总之,解决Silverlight跨域访问自托管WCF服务的问题,主要涉及配置WCF服务的行为、添加跨域策略文件、以及正确配置Silverlight客户端。理解并实施这些步骤,可以有效地打破同源策略的限制,实现跨域TCP通信。
标题中的“Silverlight安装解决问题2”表明这是一篇关于解决Silverlight安装过程中遇到问题的文章,主要针对Visual Studio(VS)的中文版和英文版。在实际操作中,开发者可能会遇到安装不成功或与VS集成时的兼容性...
并且错误代码是643 那么通常都是由于该更新所对应的组件损坏 导致该更新无法安装成功 要解决这个问题 通常都需要将该组件卸载之后重新安装来进行修复 如果无法安装的更新是Microsoft Silverlight的更新 首先需要做好...
9. **社区支持**:如果以上步骤都无法解决问题,不要忘记求助于微软官方论坛、Stack Overflow等技术社区,其他开发者可能已经遇到了类似问题并找到了解决方案。 总之,解决"Silverlight5_Tools"安装错误需要排查多...
### Silverlight常见问题解决方法集锦 #### 一、ASP.NET与Silverlight的兼容性 Silverlight作为一款浏览器插件,具有广泛的网页嵌入能力,包括ASP.NET在内的各种Web页面均可无缝集成Silverlight组件。这一特性意味...
1.文件夹SilverlightFrmWcf : winform程序托管wcf服务Silverlight调用wcf 跨域解决方案 (1)解决方案frmWcfService:winform程序托管wcf服务 (2)Silverlight项目调用wcf解决方案 2.文件夹SilverlightWCFDemo: iis...
解决这个问题,可以先安装这个程序,然后搜索我的资源,安装第二个程序:Silverlight5_Developer--“需要安装最新的silverlight Developer运行时”解决办法”,即可解决问题,亲测。 希望大家多多给这个资源评价,...
JavaScript引用Silverlight技术在数据可视化领域有着广泛的应用,特别是在创建统计图表时。此技术结合了JavaScript的灵活性和Silverlight的强大图形处理能力,为用户提供了丰富的交互体验和视觉效果。在这个案例中,...
这通常是为了兼容不同版本的Silverlight或.NET Framework,或者解决特定版本中存在的问题。每升级一个版本,可能会增加新的功能、修复已知的bug或者提高性能。开发者可以根据自己的项目需求选择适合的版本进行引用。...
解决一下问题: 用SL3写了应用,未安装SL的客户打开时默认指向安装SL2.0,造成死循环
这个“silverlight4 中文帮助”压缩包文件提供了关于Silverlight 4的详细中文文档,方便中国用户学习和理解该技术。 在Silverlight 4中,开发者可以利用其强大的功能来创建丰富的用户体验,包括但不限于以下关键...
"TextBoxEx控件"就是为了解决Silverlight 2.0 Beta版本中文件输入问题而诞生的一个解决方案。这个控件扩展了标准的TextBox控件,增加了对文件选择的支持,使得在早期版本的Silverlight中实现文件上传变得可能。 ...
描述中的"非常好的解决了silverlight 模式窗口的问题"意味着这个DEMO提供了一种有效的解决方案,使得在Silverlight应用中可以创建具有类似传统桌面应用中模态窗口效果的浮出层。 在提供的压缩包文件列表中,我们...
《Silverlight问题解决方案详解》 Silverlight,作为微软推出的一款强大的富互联网应用程序开发框架,具有丰富的用户界面功能和跨浏览器支持。在开发过程中,我们可能会遇到各种问题,本篇文章将针对 Silverlight ...
在开发和部署基于Silverlight技术的Web应用时,开发者可能会遇到一系列问题,这些问题涉及到服务器配置、网络环境以及数据库连接等。以下是对“SilverLight 网站发布遇到的问题总结与归纳”的详细阐述。 首先,...
本文将详细介绍如何利用Silverlight与WCF来解决这些问题。 #### 二、背景知识简介 ##### 2.1 Silverlight简介 Silverlight是Microsoft推出的一种用于创建Web应用程序的框架,它能够在多种浏览器上运行,支持丰富的...
解决这个问题,可以先搜索我的资源,安装第一个程序:Silverlight5--“需要安装最新的silverlight Developer运行时”解决办法”,然后安装第二个程序(本资源的程序),即可解决问题,亲测。 希望大家多多给这个资源...
Microsoft Silverlight 是一种跨浏览器、跨平台的 .NET Framework 实现,用于为 Web 生成和提供下一代媒体体验和丰富的交互式应用程序 (RIA)。Silverlight 统一了服务器、Web 和桌面的功能,统一了托管代码和动态...