После небольшого размышления (рефлексии?), Я думаю, я могу объяснить, как это работает.
И FontFamily.GenericSansSerif
, и 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());
}