WPF 怎么使用资源文件中的字体

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF 怎么使用资源文件中的字体相关的知识,希望对你有一定的参考价值。

把一个外部TTF字体文件添加包WPF工程的资源中,怎么把控件TextBox的字体设置为资源中那个字体?

1: WPF不支持直接实例化TTF文件。TTF 字体需要先安装到系统中。(想让程序自动装TTF请看这里http://blog.csdn.net/nickwar/article/details/5174259)

 

2:然后把装好的字体名称放入资源中。

 

3:参考我给出的代码设置FontFamily属性:


。。。。。。。。。。。。。。。。。。

 public MainWindow()
        
            InitializeComponent();
            FontFamily family=GetFontFamily("Your installed TTF font name");
            this.FontFamily = family ?? this.FontFamily;
        
 
        private FontFamily GetFontFamily(String resourceKey)
        
            if (String.IsNullOrEmpty(resourceKey))
            
                return null;
            
            FontFamily fontFamily = null;
            Object ttfName = this.TryFindResource(resourceKey);
            if (ttfName != null)
            
                fontFamily = new FontFamily(ttfName.ToString());
            
            return fontFamily;
        

。。。。。。。。。。。。。。。。。。。

参考技术A 正确的方式是ttf字体放在程序目录中后,设置生成操作为“Resource”,然后就可以设置FontFamily="xxxxxx/#字体的名字",字体的名字不是文件名,不带.ttf,可以在Windows下双击字体看到字体名称。

WPF 引用字体资源

外部字体文件

1.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>

注意:引用字体,与字体文件的名称无关,只能引用字体类型名称。

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

技术图片

2.后台代码引用字体

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

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

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

注意:路径Uri不能为ttf文件完整路径;参数family中不能少了./#任何一个特殊字符。否则界面显示的字,就不是指定字体中的字符显示了。

本地安装字体文件

本地已安装的字体,可以通过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;

 

以上是关于WPF 怎么使用资源文件中的字体的主要内容,如果未能解决你的问题,请参考以下文章

WPF 中.XAML文件如何读取资源文件?

如何将 WPF 图像资源文件夹写入磁盘?

解决WPF 内部异常 1: IOException: 找不到资源

wpf中资源文件字典如何使它也拥有cs文件

使用 c# wpf 从资源文件播放声音

WPF 在资源文件中使用自定义控件报错