很多朋友可能已经开始尝试使用WPF/E来在网络上制作一些动画,在其中可能遇到了一些问题。尤其是当前公开版本还是CTP,所以有一些东西在互联网中得不到解答,本人不才,准备通过本博客系列为大家进行答疑解惑。(由于WPF/E的正式名称即将公布,所以在正式名称公布后,本系列教程也会进行更新)
1. WPF/E是否可以支持嵌入式字体?
问题描述:在设计HTML网页的时候,我们会碰到很多类似的问题。一个网页中的字体在设计期非常好看,但当我们发布之后,却发现用户体验惨不忍睹,这其中最大的原因就是字体的不同。比如设计师使用Windows Vista来进行设计,使用了微软雅黑字体。而此种字体在早期Windows版本以及其它操作系统当中并不存在,浏览器会按照自己的方式来使用替代字体(或者CSS中指定的替代字体),从而导致用户体验非常差。如何解决这种问题呢?
解答:我们可以使用FontUri这种方式来嵌入字体,从而解决此种问题,根据当前版本的SDK文档中,我们可以看到,FontUri属性可以应用于Glyphs标签。
示例: 把字体从你的Windows/Fonts目录中拷出(或者从其它地方获得),拷贝到您的WPF/E相应的目录当中,然后在您的XAML语句中按照以下方式进行撰写:
<Canvas x:Name=”GlyphDisplayCanvas” Canvas.Left=”0″ Canvas.Top=”0″ >
<Glyphs x:Name=”GlyphDisplay” Fill=”Black” FontUri=”./simhei.ttf” FontRenderingEmSize=”48″ UnicodeString=”Hello, WPF/E?” />
</Canvas>
2. WPF/E如何支持中文显示?
问题描述:在前段时间我的文章留言中,有一位朋友询问如何支持中文。可能很多朋友已经注意到了,在TextBlock或者其它元素当中,如果输入中文,那么在最终显示效果当中,您可能会注意到,这些汉字全部显示为了一个规矩的方框,而不是我们想像中的汉字,那么如何解决此问题呢?
解答:的确在当前版本的WPF/E应用程序当中,很多元素其实不支持中文或者更准确地说,是双字节语言(比如韩文以及日文),但解决也比较简单,查看前面的问题解答,您或者已经得到了解答,即使用UnicodeString方式对其进行设置。当然,如果您查看SDK文档也会发现,这个UnicodeString也只能应用于Glyphs。
示例:同上面问题的解答一样,只需要把应用程序代码中的UnicodeString替换为中文即可,如下:
<Canvas x:Name=”GlyphDisplayCanvas” Canvas.Left=”0″ Canvas.Top=”0″ >
<Glyphs x:Name=”GlyphDisplay” Fill=”Black” FontUri=”./simhei.ttf” FontRenderingEmSize=”48″ UnicodeString=”生日快乐,开心就好” />
</Canvas>
以上问题解答得益于公司同事Laurence Moroney(其太太是华人,前段时间刚访问过中国)
打赏作者
谢谢,昨天偶还碰到显示中文的问题,呵呵,今天开心大哥就解答了
如果要有个通过WPF/E和数据库进行交互的例子就更好了,哈哈(我是不是太贪心了 )
另外,回复输入的内容怎么字这么小啊,几乎看不见,是我浏览器的问题吗?还是开心大哥blog样式的问题?
可以选择UTF-8么
先顶一下~
我其实是来问问题的。为什么我在joycode回复时,第一次总是提示“验证码输入错误”?如果说偶然输错,不应该次次都这样啊……
不知道别人是否也遇到这个问题。
还有,输入框的字体是否可以调整一下,眼神不大好~
第一个问题,如果使用嵌入字体的方式把微软雅黑嵌入网页,那么用户需要等待多久才能打开网页?微软雅黑可是15M的大家伙啊。还是说WPF/E有和Flash一样的只嵌入使用到的字符的功能?
生日快乐,开心!
三十一岁生日快乐,开心!
据说4月底5月初的版本变化比较大.
照着做试试,看行不行。
Nice work HongChao — it looks great, and thanks for the reference!
I am working on coupling ASP.NET and WPF/E for an MSDN white paper that shows full text input (with IME) and output (with WPF/E) in a rich web context. Watch my blog for more details! 🙂
好的工作HongChao — 这看起来伟大, 和感谢作为参考! 我从事联结ASP.NET 和WPF/E 为显示全文输入的MSDN 白皮书(与IME) 并且产品(与WPF/E) 在富有的网上下文。观看我的blog 以获得详情! 🙂
Laurence
上次中文不成,求教了,这次又发现一个问题哦。。。
试图判断sender的Fill颜色然后改变,代码如下:
if(sender.Fill.Color =="4294967295")
{
sender.Fill="Gold";
}
else{
sender.Fill="White";
}
为什么只能单向的,4294967295就是white,但是用White就是不行,用#FFFFFFFF也不成。。。。虽然功能最终没问题,但是看着那串数字很不爽。
你好,能给个完整的支持中文的.xaml文件吗?
[email protected] 将不胜感激!
一个近乎变态的解决方法,参见:
Displaying unicode in silverlight:
http://wpf-e.spaces.live.com/blog/cns!2B248D261D0E0035!122.entry
但此解决方法远比下载好几M的字库要强.