WPF/E开发基础答疑(1)

很多朋友可能已经开始尝试使用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开发基础答疑(1)”的17个回复

  1. 先顶一下~

    我其实是来问问题的。为什么我在joycode回复时,第一次总是提示“验证码输入错误”?如果说偶然输错,不应该次次都这样啊……
    不知道别人是否也遇到这个问题。

    还有,输入框的字体是否可以调整一下,眼神不大好~

  2. 第一个问题,如果使用嵌入字体的方式把微软雅黑嵌入网页,那么用户需要等待多久才能打开网页?微软雅黑可是15M的大家伙啊。还是说WPF/E有和Flash一样的只嵌入使用到的字符的功能?

  3. Pingback: Web.Next
  4. 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

  5. 上次中文不成,求教了,这次又发现一个问题哦。。。
    试图判断sender的Fill颜色然后改变,代码如下:

    if(sender.Fill.Color =="4294967295")
    {
    sender.Fill="Gold";
    }
    else{
    sender.Fill="White";
    }

    为什么只能单向的,4294967295就是white,但是用White就是不行,用#FFFFFFFF也不成。。。。虽然功能最终没问题,但是看着那串数字很不爽。

  6. Pingback: [email protected]
  7. Pingback: joycode
  8. Pingback: 吴博

发表评论