Работа с текстом и шрифтами в XAML и WPF

Работа с текстом и шрифтами в XAML позволяет сделать наше приложение более красивым и удобным для пользователей. В WPF мы можем использовать как системные шрифты, так и собственные, встраивая их в своё приложение. В этой части мы рассмотрим то, как ведется работа с текстом и шрифтами в XAML и WPF.

Работа с текстом и шрифтами в XAML

Для работы с текстом и шрифтами в WPF предусмотрены следующие свойства элементов:

В некоторых элементах управления 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 для вывода текста в окне приложения, где у каждого элемента установлены свои значения свойств для шрифта. В визуальном конструкторе окно приложения будет выглядеть следующим образом:

Работа с текстом и шрифтам в XAML и WPF

В свойстве 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>

С такими настройками строка текста будет выглядеть следующим образом:Работа с текстом и шрифтам в XAML и WPF

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

Мы можем использовать собственные шрифты в приложении WPF. Для этого необходимо сделать файл шрифта ресурсом. Например, я скачал файл Vivaldi script.ttf и разместил его в папке Fonts проекта:

Работа с текстом и шрифтам в XAML и WPFВ свойствах файла в Visual Studio необходимо указать действие при сборке — «Ресурс»:Работа с текстом и шрифтам в XAML и WPFВ файле проекта вы должны увидеть следующую запись:

<ItemGroup>
  <Resource Include="Fonts\Vivaldi script.ttf"/>
</ItemGroup>

Теперь мы можем сослаться на этот шрифт, используя свойство FontFamily, например, так:

FontFamily="./Fonts/#Vivaldi script"

Результат будет следующий:

Работа с текстом и шрифтам в XAML и WPF

Стоит отметить, что для того, чтобы шрифт применился необходимо точно знать имя семейства шрифтов, которое не всегда может совпадать с именем файла.

Итого

Работа с текстом и шрифтам в XAML и WPF осуществляется с использованием группы свойств, позволяющих изменять стиль начертания шрифта, размер, жирность, способы переноса строк текста и так далее. Для того, чтобы использовать собственные шрифты в WPF, мы должны добавить файл шрифта в приложение как ресурс и использовать имя семейства шрифтов в свойстве FontFamily.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии