zoukankan      html  css  js  c++  java
  • WPF 引用字体文件资源

    外部字体文件

    1.后台代码引用字体

    将一个名为“ChineseCharacterSpecialFont.ttf”的ttf文件,放在桌面路径,后台引用方式如下:

    1 var ttfFilePath = @"C:UsersuserDesktop";
    2 HanziTextBlock.FontFamily = new System.Windows.Media.FontFamily(new Uri(ttfFilePath), "./#楷体_GB2312");

    路径Uri只需要文件夹就行了,后面一个参数family为 “./#指定字体类型名称“。

    注意:

    • 路径Uri不是ttf文件完整路径;ttf文件所在文件夹,后需要添加”/“或者”\“;
    • 参数family中不能少了./#任何一个特殊字符。否则界面显示的字,就不是指定字体中的字符显示了。
    • 引用字体,与字体文件的名称无关,只能引用字体类型名称。

    #后面表示字体类型名称,可以通过双击打开ttf文件查看:

    2.WPF-Xaml资源引用

    把一个名为“ChineseCharacterSpecialFont.ttf”的ttf文件,放在WpfApp2工程下。引用方式如下:

    1     <Window.Resources>
    2         <FontFamily x:Key="HanziCharacterFontFamily">pack://application:,,,/WpfApp2;component/#楷体_GB2312</FontFamily>
    3     </Window.Resources>
    4     <Grid>
    5         <TextBlock x:Name="HanziTextBlock" Text="a" FontFamily="{StaticResource HanziCharacterFontFamily}"
    6                    FontSize="50" HorizontalAlignment="Center" VerticalAlignment="Center"/>
    7     </Grid>

    本地安装字体文件

    本地已安装的字体,可以通过Fonts.SystemFontFamilies获取。

    Xaml字体就不用说了。后台设置字体类型,可以通过:

    1     var systemFontFamilies = Fonts.SystemFontFamilies;
    2     var songTiFamily = systemFontFamilies.FirstOrDefault(i=>i.Source=="KaiTi");
    3     HanziTextBlock.FontFamily = songTiFamily;

    系统字体FontFamily数据,Source名称是英文的。怎么通过中文名称获取相应字体?

    FamilyNames为一个含有多语言项的字典,Key为语言项,Value为字体类型名称。

     1     var systemFontFamilies = Fonts.SystemFontFamilies;
     2     FontFamily filteredChineseFamily = null;
     3     foreach (FontFamily family in systemFontFamilies)
     4     {
     5         LanguageSpecificStringDictionary familyNames = family.FamilyNames;
     6         if (familyNames.ContainsKey(XmlLanguage.GetLanguage("zh-cn")))
     7         {
     8             if (familyNames.TryGetValue(XmlLanguage.GetLanguage("zh-cn"), out var chineseFontName)&&chineseFontName=="楷体")
     9             {
    10                 filteredChineseFamily = family;
    11                 break;
    12             }
    13         }
    14     }
    15     HanziTextBlock.FontFamily = filteredChineseFamily;

    关键字:后台代码引用ttf字体,WPF前端引用ttf字体

  • 相关阅读:
    [专项]tcp状态机,为什么3次握手(很好)(done)
    Win7系统如何创建计划任务的小技巧(图文)
    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
    Java项目 使用MyEclipse打包生成jar文件方法
    excel插入柱形图和插入置信值
    关于Virtual Box虚拟机里的系统不能启动的解决方法
    html文件的中文乱码问题与在浏览器中的显示 .
    Windows的计划任务
    不能为虚拟电脑 Fedora1 打开一个新任务.
    bat 通过bat脚本来每隔一段时间运行jar包
  • 原文地址:https://www.cnblogs.com/kybs0/p/12766584.html
Copyright © 2011-2022 走看看