.net System.Drawing.FontFamily.GenericSansSerif-什么会影响它选择的基础字体?

.net System.Drawing.FontFamily.GenericSansSerif-什么会影响它选择的基础字体?,.net,font-family,.net,Font Family,我正在查看使用system.drawing命名空间中FontFamily.GenericSansSerif的图像生成代码。我通常将xhtml/css字体选择语句末尾的类似代码视为在没有找到更理想(特定)字体时的一种退路/最后手段。在.net framework中,哪些环境参数会影响实际选择的字体?是否有某种图表说明当您指定GenericTransserif时.net framework如何选择字体?对于GenericTransserif,它将尝试按名称“Microsoft San Serif”、

我正在查看使用system.drawing命名空间中FontFamily.GenericSansSerif的图像生成代码。我通常将xhtml/css字体选择语句末尾的类似代码视为在没有找到更理想(特定)字体时的一种退路/最后手段。在.net framework中,哪些环境参数会影响实际选择的字体?是否有某种图表说明当您指定GenericTransserif时.net framework如何选择字体?

对于
GenericTransserif
,它将尝试按名称“Microsoft San Serif”、“Arial”、“Tahoma”的顺序从以下字体返回该系列。如果这些字体都没有安装,它会选择第一个安装字体的系列,按名称排序

对于
GenericSerif
,它尝试从名为“Times New Roman”的字体返回族。如果未安装,则使用与
GenericSanSerif
相同的规则。i、 e.如果您删除“Times New Roman”字体,这与在经过一点反射(反射?)后调用
GenericSanSerif
是一样的,我想我可以解释这是如何工作的

FontFamily.GenericTransserif
FontFamily.GenericSerif
都使用一个内部构造函数,通过其
IntPtr
值查找系统上的默认字体。在这两种情况下,它都会通过
IntPtr.Zero
,从而有效地让GDI+进行选择(我决定不进入特定的兔子洞)

基本上,FontFamily类是密封的,并使用指针,因此我不必费心尝试重写这些属性。相反,您可以编写自己的方法,模仿CSS中的回退行为:

public FontFamily DefaultFont(params string[] fonts)
{
    // Try to return the first matching font
    foreach (var font in fonts)
    {
        try { return new FontFamily(font); }
        catch (ArgumentException) { }
    }

    // Resort to system default
    return new FontFamily(new GenericFontFamilies());
}

这对更改控件子代使用的默认字体没有帮助。最好知道回退逻辑是什么。谢谢