在 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>
如何确定实际选择了哪种字体并用于控件?
The XAML text renderer [...] uses the specified list (family) of fonts on a character by character basis.
所以没有你问的'控件使用的字体'。
要找出每个字符使用的字体,this response 看起来是个不错的起点。
我最终只需要解析 FontFamily
的 Source
属性:
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));
}
在 WPF 中,我为我的控件设置了样式,因此它指定了多个字体系列:
<Style TargetType="{x:Type MyControl}">
<Setter Property="FontFamily"
Value="Helvetica, Arial, Segoe UI" />
</Style>
如何确定实际选择了哪种字体并用于控件?
The XAML text renderer [...] uses the specified list (family) of fonts on a character by character basis.
所以没有你问的'控件使用的字体'。
要找出每个字符使用的字体,this response 看起来是个不错的起点。
我最终只需要解析 FontFamily
的 Source
属性:
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));
}