在WPF中更改代码后的字体样式

14

我该如何在WPF的代码后端更改FontStyle?我尝试了这个:

listBoxItem.FontStyle = new FontStyle("Italic"); 

我遇到了错误,有什么想法吗?

3个回答

21

它是FontStyles.Italic... 使用FontStyles枚举来设置FontStyle的值

listBoxItem.FontStyle = FontStyles.Italic;

2
今日免费次数已满, 请开通会员/明日再来
listBoxItem.FontStyle = FontStyles.Italic;

它必须是 FontStyles.Italic;。 - Anatoliy Nikolaev
我尝试喜欢它,但是我得到了错误,无法解决符号italic,有什么想法吗? - John Jerrby

1
在这种情况下,FontStyle 是结构体 MSDN

定义了一个表示字体样式的结构体,包括正常、斜体或倾斜。

可以在 ILSpy 中查看。
[TypeConverter(typeof(FontStyleConverter)), Localizability(LocalizationCategory.None)]
public struct FontStyle : IFormattable
{
    private int _style;

    internal FontStyle(int style)
    {
        this._style = style;
    }

在这里,我们可以看到类型为Int的字段_style。要设置Int类型的值,需要从静态类FontStyles中获取:
public static class FontStyles
{
     public static FontStyle Normal
     {
        get
        {
            return new FontStyle(0);
        }
    }

    public static FontStyle Oblique
    {
        get
        {
            return new FontStyle(1);
        }
    }

    public static FontStyle Italic
    {
        get
        {
            return new FontStyle(2);
        }
    }

    internal static bool FontStyleStringToKnownStyle(string s, IFormatProvider provider, ref FontStyle fontStyle)
    {
        if (s.Equals("Normal", StringComparison.OrdinalIgnoreCase))
        {
            fontStyle = FontStyles.Normal;
            return true;
        }

        if (s.Equals("Italic", StringComparison.OrdinalIgnoreCase))
        {
            fontStyle = FontStyles.Italic;
            return true;
        }

        if (s.Equals("Oblique", StringComparison.OrdinalIgnoreCase))
        {
            fontStyle = FontStyles.Oblique;
            return true;
        }

        return false;
    }
}

所以事实证明,设置FontStyle需要引用静态类FontStyles:
SomeControl.FontStyle = FontStyles.Italic;

可能有点混淆,实际上有两个FontStyle(没有s)枚举:

namespace MS.Internal.Text.TextInterface

internal enum FontStyle
{
    Italic = 2,
    Oblique = 1,
    Normal = 0
}

这个枚举是 Internal 的,我认为它与公共结构 FontStyles 在系统内部一起使用。

命名空间 System.Drawing

[Flags]
public enum FontStyle
{
    Regular = 0,
    Bold = 1,
    Italic = 2,
    Underline = 4,
    Strikeout = 8
 }

这个标志枚举是公共的,在System.Drawing中使用,如下所示:
SomeControl.Font = new Font(FontFamily.GenericSansSerif,
                        12.0F, FontStyle.Bold | FontStyle.Italic);

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