如何在WPF(C#)中批量加载字体图标

如何在WPF(C#)中批量加载字体图标


前言

在使用ttf格式字体图标文件时,有可能会遇到要列举出文件中所有图标的情况。如下
在这里插入图片描述

获取ttf文件中所有的UniCode

代码如下(示例):

public static IEnumerable<int> GetUniCodes(string uri)
    {
        var result = new List<int>();
        var families = Fonts.GetFontFamilies(uri);
        foreach (var fontFamily in families)
        {
            var typeface = fontFamily.GetTypefaces().FirstOrDefault();
            if (!(typeface?.TryGetGlyphTypeface(out var glyph) ?? false)) continue;
            var characterMap = glyph.CharacterToGlyphMap;
            foreach (var (key, _) in characterMap) result.Add(key);
        }
        return result;
    }

写入WPF界面

代码如下(示例):

public void LoadFonts()
    {
        ShowFonts.Clear();
        if (Path.GetExtension(FontUri).ToLower() != ".ttf")
        {
            MessageBox.Show("选择的不是字体文件");
            return;
        }

        var familyName = new GlyphTypeface(new Uri(FontUri)).FamilyNames.FirstOrDefault().Value;
        IconFontFamily =
            $"{Path.GetDirectoryName(FontUri)?.Replace("\\", "/")}/#{familyName}";
        GetUniCodes(FontUri).Select(point => new FontModel()
                                             {
                                                 fontUri = char.ConvertFromUtf32(point),
                                                 title = $"&#x{Convert.ToInt64(point):x};"
                                             }).ToList().ForEach(r=>ShowFonts.Add(r));
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值