就不是指定字体中的字符显示了

时间:2021-09-10 02:11:06

标签:

外部字体文件 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:\Users\user\Desktop\";
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 引用字体资源

标签:

原文地点:https://www.cnblogs.com/kybs0/p/12766584.html