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字体

  • 相关阅读:
    第一次个人编程作业
    第一次软工作业
    [Manacher]最长回文子串
    面向对象程序设计 总结作业
    面向对象程序设计 小黄衫晒单
    面向对象程序设计 作业三
    面向对象程序设计 作业二
    面向对象程序设计 作业一
    SSD/Memory技术学习拼图
    第一次结对编程作业
  • 原文地址:https://www.cnblogs.com/kybs0/p/12766584.html
Copyright © 2011-2022 走看看