Изменение стиля шрифта в коде позади в WPF

Как я могу изменить FontStyle в коде в WPF. Я попробовал:

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

и я получил ошибку, есть идеи?

3 ответов


Он был FontStyles.Italic... Используйте FontStyles перечисление, чтобы установить значение для FontStyle

listBoxItem.FontStyle = FontStyles.Italic;

попробуй такое FontStyles.Italic

listBoxItem.FontStyle = FontStyles.Italic;

в данной ситуации FontStyle структура MSDN:

определяет структуру, представляющую стиль грани шрифта как обычный, Курсив или наклонный.

его можно просмотреть в ILSpy:

[TypeConverter(typeof(FontStyleConverter)), Localizability(LocalizationCategory.None)]
public struct FontStyle : IFormattable
{
    private int _style;

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

здесь мы видим, что поле _style типа Int. Чтобы установить значение Int type, он взят из статического класса 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
}

это перечисление внутренние и я думаю, используется внутри системы в сочетании с общественной структурой FontStyles.

namespace 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);