如何检查字体是否支持特定的样式?

5
当我更改应用程序字体时,由于我在应用程序的某个部分使用了删除线,而一些字体不支持它,因此会出现以下异常:

enter image description here

我使用字体对话框更改我的应用程序字体。在将其分配给我的应用程序后,我需要检查所选字体是否支持删除线样式

有什么推荐的方法吗?我知道我可以创建一个带有样式的字体并捕获异常,但是否有更优雅的方法来做到这一点呢?

谢谢。


编辑:用户选择字体,不一定是删除线。在那个时候,我需要检查字体是否支持删除线样式,因为我在应用程序的某个部分创建了一个删除线字体。如果字体不支持删除线样式,将不允许用户选择该字体。


异常就是你得到的全部。不用担心,这很特殊。 - Hans Passant
3个回答

3

更新:(反映初始帖子中的更新):

InstalledFontCollection ifc = new InstalledFontCollection();
for (int i = 0; i < ifc.Families.Length; i++)
    {
         if (ifc.Families[i].IsStyleAvailable(FontStyle.StrikeOut))
         {
             //add particular font with this family to your "font selector"
         }
    }

抱歉,也许我没有正确解释我的问题。请查看我的编辑。 - Daniel Peñalba

0

如果您正在使用标准的Font类,则可以使用 Font.Strikeout 属性:

//Gets a value that indicates whether this Font specifies a horizontal line through the font.
public bool Strikeout { get; }

抱歉,也许我没有正确解释我的问题。请查看我的编辑。 - Daniel Peñalba
@Daniel Peñalba 你可以创建一个字体对象供用户选择,并获取属性的值。如果它是“false”,那么你必须禁止字体选择。 - VMAtm
看看安德烈的回答,那就是我想表达的意思。 - Daniel Peñalba
@Daniel Peñalba的回答对你有帮助吗? - VMAtm

0

最终我使用了以下内容:

    private bool SupportStrikeout(Font font)
    {
        try
        {
            using (Font strikeout = new Font(font, FontStyle.Strikeout))
            {
                return true;
            }
        }
        catch (ArgumentException)
        {
            return false;
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接