Использование шрифтов

82

Класс Control определяет небольшой набор свойств, связанных со шрифтами, которые определяют отображение текста в элементе управления. Эти свойства перечислены ниже.

Класс Control не определяет свойства, использующие его шрифт. Многие элементы управления содержат свойство Text, но оно не определено как часть базового класса Control. Очевидно, что свойства шрифтов ничего не означают, если они не используются производным классом.

FontFamily

Имя шрифта

FontSize

Размер шрифта в независящих от устройства единицах (по 1/96 дюйма). Это небольшое отклонение от традиции предназначено для поддержки новой модели прорисовки в WPF, которая не зависит от разрешения. Обычные Windows-приложения измеряют шрифты с помощью пунктов (point), которые равны 1/72 дюйма на стандартном мониторе для ПК. Если вам нужно преобразовать размер шрифта WPF в более знакомый размер в пунктах, просто умножьте его на 3/4. Например, традиционные 36 пунктов эквивалентны 48 единицам в WPF.

FontStyle

Наклон текста, представленный объектом FontStyle. Возможные значения свойства FontStyle содержатся в статических свойствах класса FontStyles, который включает написание символов Normal, Italic или Oblique. (Oblique — это искусственный способ создания курсивного текста на компьютере, в котором нет необходимого курсивного шрифта. Буквы берутся из обычного шрифта и скашиваются с помощью специального преобразования. Как правило, результат получается неважным.)

FontWeight

Плотность текста, представленная объектом FontWeight. Вначале свойство FontWeight устанавливается из статических свойств класса FontWeights. Наиболее популярен вариант Bold (жирный), хотя в некоторых гарнитурах имеются и другие, такие как Heavy, Light, ExtraBold и т.д

FontStretch

Коэффициент растяжения или сжатия текста, представленный объектом FontStretch. Возможные значения свойства FontStretch содержатся в статических свойствах класса FontStretches. Например, UltraCondensed сжимает текст до 50% от обычной ширины, a UltraExpanded растягивает его до 200%. Растяжение шрифта является особенностью OpenType, которая не поддерживается многими гарнитурами. (Чтобы поэкспериментировать с этим свойством, попробуйте шрифт Rockwell, который поддерживает его.)

Семейство шрифтов

Семейство шрифтов (font family) представляет собой коллекцию родственных гарнитур. Например, Arial Regular, Arial Bold, Arial Italic и Arial Bold Italic входят в семейство шрифтов Arial. Типографские правила и символы для каждой вариации определяются отдельно, однако операционная система считает, что все они связаны между собой. Поэтому можно указать для какого-либо элемента шрифт Arial Regular, присвоить свойству FontWeight значение Bold и быть уверенными в том, что WPF переключится на гарнитуру Arial Bold.

При выборе шрифта необходимо указывать полное имя семейства. При указании FontFamily укороченные строки не годятся. То есть вместо полного имени Times New Roman нельзя указывать Times или Times New. Чтобы получить курсивный или жирный шрифт, можно (необязательно) указать полное имя гарнитуры.

Но все-таки проще и удобнее получить требуемый вариант, просто указав имя семейства и другие свойства (такие как FontStyle и FontWeight):

<Button Name="btn" FontFamily="Calibri" FontWeight="Bold">Привет!</Button>
<!-- Так тоже допустимо -->
<Label Name="lbl" FontFamily="Calibri Bold">Hello!</Label>
btn.FontFamily = "Times New Roman";
btn.FontSize = 30;

Выделение и оформление текста

Некоторые элементы поддерживают и более сложные манипуляции с текстом с помощью свойств TextDecorations и Typography. Они позволяют украсить текст. Например, можно задать свойство TextDecorations с помощью статического свойства из класса TextDecorations. Оно предоставляет только четыре варианта выделения, каждый из которых позволяет добавить к тексту линию: Baseline (базовая линия), OverLine (надчеркивание), Strikethrough (зачеркивание) и Underline (подчеркивание). Свойство Typography является более сложным: оно предоставляет доступ к специальным вариантам гарнитур, которые имеются лишь у некоторых шрифтов. Это могут быть, например, различные выравнивания цифр, лигатуры (слитное написание букв) и капители.

Возможности TextDecorations и Typography применяются в основном в содержимом потоковых документов, где служат для создания форматированных документов. Однако такие навороты имеются и в классе TextBox. Кроме того, они поддерживаются элементом TextBlock — облегченной версией Label, которая прекрасно подходит для вывода небольших объемов многострочного текстового содержимого. Вряд ли вы будете использовать TextDecorations в элементе управления TextBox или изменять его свойство Typography, но вам вполне может понадобиться подчеркивание в TextBlock:

<TextBlock TextDecorations="Underline">Underlined text</TextBlock>

Наследование шрифтов

Когда задается одно из свойств шрифта, его значение распространяется и на вложенные объекты. Например, если задать свойство FontFamily для окна верхнего уровня, то каждый элемент управления в данном окне получит это же значение FontFamily (если только в нем явным образом не определен другой шрифт). Это поведение похоже на концепцию свойств окружения (ambient properties) из Windows Forms, хотя основано на другом механизме. Оно работает потому, что свойства шрифтов являются свойствами зависимости, а одной из характеристик свойств зависимости является наследование значений свойств — которое и передает параметры шрифта всем вложенным элементам управления.

Заметьте, что наследование значения свойств может проходить через элементы, которые даже не поддерживают это свойство. Например, предположим, что вы создаете окно, в котором имеется панель StackPanel, а внутри нее — три элемента Label. Вы можете задать свойство FontSize окна, поскольку класс Window порожден от класса Control. Вы не можете задать свойство FontSize для панели, поскольку она не является элементом управления. Но если для окна задать свойство FontSize, то значение этого свойства пройдет сквозь StackPanel до меток и изменит размер их шрифтов.

Кроме параметров шрифтов, наследование значений свойств используется и в некоторых других базовых свойствах. Так, наследование применяется свойством Foreground в классе Control. А вот свойство Background не использует наследование. (Хотя фон по умолчанию указывается пустой ссылкой, которая отображается большинством элементов управления в виде прозрачного фона. Это означает, что через него будет виден родительский фон.) В классе UIElement наследование поддерживается свойствами AllowDrop, IsEnabled и IsVisible. В классе FrameworkElement наследование поддерживается свойствами CultureInfo и FlowDirection.

Свойство зависимости поддерживает наследование только если флаг FrameworkPropertyMetadata.Inherits имеет (не стандартное) значение true.

Пройди тесты
Лучший чат для C# программистов