在 WPF 中指定多个字体系列时获取正在使用的字体

Get font in use when multiple font families specified in WPF

在 WPF 中,我为我的控件设置了样式,因此它指定了多个字体系列:

<Style TargetType="{x:Type MyControl}">
    <Setter Property="FontFamily"
            Value="Helvetica, Arial, Segoe UI" />
</Style>

如何确定实际选择了哪种字体并用于控件?

根据this blog post

The XAML text renderer [...] uses the specified list (family) of fonts on a character by character basis.

所以没有你问的'控件使用的字体'。

要找出每个字符使用的字体,this response 看起来是个不错的起点。

我最终只需要解析 FontFamilySource 属性:

public static FontFamily GetFirstValid(this FontFamily fontFamily)
{
    return fontFamily?.Source.Split(',')
                     .Select(p => new FontFamily(p))
                     .FirstOrDefault(f => f.GetTypefaces()
                                           .Any(t => t.TryGetGlyphTypeface(out GlyphTypeface glyph)
                                                     && glyph?.CharacterToGlyphMap.Count > 0));
}