Работа с текстом и шрифтами в XAML позволяет сделать наше приложение более красивым и удобным для пользователей. В WPF мы можем использовать как системные шрифты, так и собственные, встраивая их в своё приложение. В этой части мы рассмотрим то, как ведется работа с текстом и шрифтами в XAML и WPF.
Работа с текстом и шрифтами в XAML
Для работы с текстом и шрифтами в WPF предусмотрены следующие свойства элементов:
TextBlock — этот элемент содержит все перечисленные ниже свойства управления текстом и шрифтами| Свойство | Тип | Описание |
FontSize |
double |
Размер шрифта (кегль, размер по вертикали) |
FontFamily |
FontFamily |
Семейство шрифтов, например, Arial, Times New Roman и т.д. |
FontStretch |
FontStretch |
Начертания шрифта (разреженное, уплотненное) |
FontStyle |
FontStyle |
Декорирование шрифта (курсив, подчеркивание) |
FontWeight |
FontWeight |
Жирность (толщина начертания шрифта) |
TextAlignment |
TextAlignment |
Выравнивание текстового содержимого по горизонтали |
TextWrapping |
TextWrapping |
Варианты переноса текста |
TextTrimming |
TextTrimming |
Обрезка текста, применяемая, когда текст выходит за пределы области содержимого. |
TextDecorations |
TextDecorationCollection |
Эффекты, которые применяются к тексту |
Typography |
Typography |
Получение действующего в настоящее время варианта оформления |
Рассмотрим действие некоторых из этих свойств на следующем примере:
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<StackPanel>
<TextBlock Margin="10" Text="привет, мир!"
FontSize="48"
FontFamily="Arial"
FontStretch="Normal"
FontStyle="Italic"
FontWeight="Bold"
TextAlignment="Center"
TextWrapping="WrapWithOverflow"
TextTrimming="CharacterEllipsis"
TextDecorations="Strikethrough"
Typography.Capitals="AllSmallCaps"/>
<TextBlock Margin="10" Text="Это очень большая строка текста, которая будет обрезана"
FontSize="36"
FontFamily="Book Antiqua"
FontStretch="ExtraCondensed"
FontStyle="Italic"
FontWeight="Heavy"
TextAlignment="Right"
TextWrapping="NoWrap"
TextTrimming="CharacterEllipsis"
TextDecorations="Baseline"/>
<TextBlock Margin="10" Text="Это очень большая строка текста, которая будет перенесена"
FontSize="36"
FontFamily="Calibri"
FontStretch="ExtraCondensed"
FontStyle="Oblique"
FontWeight="Light"
TextAlignment="Right"
TextWrapping="Wrap"
TextTrimming="WordEllipsis"
TextDecorations="OverLine"/>
</StackPanel>
</Window>
Здесь мы используем три элемента TextBlock для вывода текста в окне приложения, где у каждого элемента установлены свои значения свойств для шрифта. В визуальном конструкторе окно приложения будет выглядеть следующим образом:
В свойстве FontFamily были указаны установленные в системе шрифты. При этом, мы можем добавить в приложение свой шрифт, например, ttf и использовать его. О том как это сделать будет рассказано ниже.
Что касается свойства FontStretch, то это свойство описывает степень растяжения формы шрифта по сравнению с ее нормальным соотношением сторон, которое представляет собой исходное соотношение ширины и высоты, указанное для глифов в шрифте и может принимать следующие значения:
| Растяжение шрифта | % от нормы |
|---|---|
UltraCondensed |
50.0% |
ExtraCondensed |
62.5% |
Condensed |
75.0% |
SemiCondensed |
87,5 % |
Medium |
100.0% |
SemiExpanded |
112.5% |
Expanded |
125.0% |
ExtraExpanded |
150.0% |
UltraExpanded |
200.0% |
Стоит отметить, что не все шрифты в WPF поддерживают это свойство.
Свойства TextWrapping может принимать следующие значения:
| Имя | Значение | Описание |
|---|---|---|
NoWrap |
1 |
Перенос строк текста не выполняется. |
Wrap |
2 |
Разрыв строки происходит, если строка выходит за пределы ширины доступной области |
WrapWithOverflow |
0 |
Разрыв строки происходит, если строка выходит за пределы ширины доступной области. Однако строка может выходить за пределы ширины области, если алгоритм разрыва строк не сможет найти возможность разрыва строки, например, в случае очень длинного слова, ограниченного контейнером фиксированной ширины без разрешенной прокрутки. |
Свойство TextTrimming может принимать следующие значения:
| Имя | Значение | Описание |
|---|---|---|
CharacterEllipsis |
1 |
Текст усекается по линии между символами. На месте оставшегося текста помещается многоточие (…). Пример — смотри на рисунке выше второй текстовый блок |
None |
0 |
Текст не усекается. |
WordEllipsis |
2 |
Текст усекается по линии между словами. На месте оставшегося текста помещается многоточие (…). |
Свойства TextWrapping и TextTrimming связаны между собой следующим образом: значение свойства TextTrimming применяется в том случае, если свойство TextWrapping равно NoWrap.
Свойство TextDecorations представляет собой коллекцию элементов типа TextDecoration, каждый из которых содержит предопределенное оформление текста. В приведенном выше примере для каждого текстового блока использовался один такой предопределенный элемент для указания подчеркнутого текста, зачеркнутого и т.д. При этом, мы можем указать сразу несколько значений TextDecoration, например, так:
<TextBlock Margin="10" Text="Это очень большая строка текста, которая будет перенесена"
FontSize="36"
FontFamily="Calibri" TextWrapping="Wrap">
<TextBlock.TextDecorations>
<TextDecoration Location="OverLine"></TextDecoration>
<TextDecoration Location="Strikethrough"></TextDecoration>
<TextDecoration Location="Underline"></TextDecoration>
<TextDecoration Location="Baseline"></TextDecoration>
</TextBlock.TextDecorations>
</TextBlock>
С такими настройками строка текста будет выглядеть следующим образом:
Использование собственных шрифтов в WPF
Мы можем использовать собственные шрифты в приложении WPF. Для этого необходимо сделать файл шрифта ресурсом. Например, я скачал файл Vivaldi script.ttf и разместил его в папке Fonts проекта:
В свойствах файла в Visual Studio необходимо указать действие при сборке — «Ресурс»:
В файле проекта вы должны увидеть следующую запись:
<ItemGroup> <Resource Include="Fonts\Vivaldi script.ttf"/> </ItemGroup>
Теперь мы можем сослаться на этот шрифт, используя свойство FontFamily, например, так:
FontFamily="./Fonts/#Vivaldi script"
Результат будет следующий:
Стоит отметить, что для того, чтобы шрифт применился необходимо точно знать имя семейства шрифтов, которое не всегда может совпадать с именем файла.
Итого
Работа с текстом и шрифтам в XAML и WPF осуществляется с использованием группы свойств, позволяющих изменять стиль начертания шрифта, размер, жирность, способы переноса строк текста и так далее. Для того, чтобы использовать собственные шрифты в WPF, мы должны добавить файл шрифта в приложение как ресурс и использовать имя семейства шрифтов в свойстве FontFamily.

