目前这个项目是用VS2010做的基于WPF的简单排版系统,有使用专用字符的需求,就是XP上的造字程序或Win7的专用字符编辑器造的字。现在测试发现可以在记事本、Word等程序中显示的专用字,在WPF应用无法显示(显示为一个框或空白)。
    进一步测试,发现VS2010创建的WindowsApplication在开发和运行时可以显示专用字符,而VS2010创建的WpfApplication却无法显示,在VS2010的代码编辑器中都无法显示专用字符,所以感觉是个硬伤,WPF和传统的Windows应用在字符处理有差别。
    有办法解决吗?让WPF应用可以显示专用字符?WPF专用字符造字Visual Studio 2010

解决方案 »

  1.   

    这完全是个超出意料的问题,按以往VB、Delphi的项目经验,Windows的TTF字体,用造字程序造的字,各个应用都是可以直接使用的。所以选WPF来做的时候,这个问题完全没有考虑,直接认为是没问题的。内部测试的时候都没测过,现在是客户使用中才发现显示不出来
      

  2.   

    http://social.msdn.microsoft.com/Forums/vstudio/en-US/bc7b64e4-df84-4ce6-ac28-9d283bd0ae07/true-type-font-not-recognized-by-wpf看看是否有帮助
      

  3.   

    你试下用<Glyphs />来显示你的这个字体,不用TextBlock
      

  4.   

    找到一个解决办法:
    http://social.msdn.microsoft.com/Forums/vstudio/en-US/73b22408-c60f-44d5-81bc-73d08fd893c0/display-private-characters-in-datagrid-define-by-using-the-private-character-editor-system需要修改的代码还是比较多,一个原因是c:\Windows这个路径应该结合Environment动态处理,不能固定为c盘,毕竟还是有将系统装其他盘上的情况;另一个原因是涉及专用字符的控件,如TextBox,由于字体可以由用户指定,所以没办法统一通过Style去指定FontFamily,有办法给应用中的所有TextBox指定一个候选FontFamily吗?
      

  5.   

    动态加载样式,写2个资源字典的XAML,比如font1.xaml里面对应你应用一个FontFamily的所有控件的所有样式,font2.xaml对应另一个。换字体的时候清除掉原来的资源然后加载对应的xaml即可。跟换肤一样。Application.Current.Resources.MergedDictionaries.remove(currentFontResources);
    Application.Current.Resources.MergedDictionaries.add(newFontResources);
    currentFontResources = newFontResources;