Работа с текстом и шрифтами в 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
.