Изменение стиля шрифта в коде позади в WPF
Как я могу изменить FontStyle
в коде в WPF. Я попробовал:
listBoxItem.FontStyle = new FontStyle("Italic");
и я получил ошибку, есть идеи?
3 ответов
Он был FontStyles.Italic
... Используйте FontStyles
перечисление, чтобы установить значение для FontStyle
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);