Главная » Silverlight » Свойства шрифтов В классе TextBlock доступны свойства шрифтов, влияющие на внешний вид текста на экране (табл. 5.2).

0

Очевидно, наиболее важное свойство — FontFamily, фактически определяющее кол­лекцию связанных шрифтов. Например, значение Arial представляет семейство шриф­тов Arial Regular, Arial Bold, Arial Italic и Arial Bold Italic. Для каждого варианта определены разные типографские правила, однако операционная система учитывает, что они взаимосвязаны. Поэтому в приложении можно задать имя шрифта Arial Regular и присвоить свойству FontWeight значение Bold, в результате чего сим­волы будут выведены шрифтом Arial Bold.

Таблица 5.2. Свойства шрифтов, определенные в классе Control

Имя

свойства

Описание

FontFamily

Имя шрифта или семейства шрифтов, применяемых для вывода текста; приложение Silverlight выполняется на стороне клиента, поэтому выбор ограничен девятью шрифтами — Arial, Arial Black, Comic Sans MS, Courier New, Georgia, Lucida, Times New Roman, Trebuchet MS и Verdana; однако затратив дополнительное время, можно распространять пользовательские шрифты, упаковав их в сборку проекта

FontSize

Размер шрифта в пикселях; в обычных приложениях Windows шрифты измеряются в пунктах (points); один пункт равен 1/72 дюйма на стандартном мониторе PC; один пиксель равен приблизительно 1/96 дюйма; следовательно, чтобы преобразовать размер шрифта Silverlight в пункты, нужно умножить его на 3/4; например, значение FontSize, равное 20 пикселям, эквивалентно традиционному размеру 15 пунктов

FontStyle

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

FontWeight

Вес шрифта, представленный объектом FontWeight; предопределенные значения FontWeight можно извлечь из статических свойств класса FontWeights; наиболее часто используются значения Normal (Обычный) и Bold (Полужирный), однако доступны и другие значения: Heavy (Тяжелый), Light (Легкий), ExtraBold (Жирный) и т.п.; если вариант Bold не представлен в предопределенном шрифте, Silverlight увеличит толщину линий шрифта, имитируя полужирный шрифт

FontStretch

Степень сжатия или растяжения символов, представленная объектом FontStretch; предопределенные значения FontStretch можно извлечь из статических свойств класса Fontstretches; например, значение UltraCondenced приводит к сжатию букв до 50% от их нормальной ширины, а значение UltraExpanded — к растяжению до 200%; сжатие и растяжение — это средство шрифтов TrueType, не поддерживаемое многими шрифтами; встроенные шрифты Silverlight не поддерживают средства TrueType, поэтому свойство FontStretch применимо только при внедрении пользовательских шрифтов

При задании шрифта нужно привести его имя, как в приведенной ниже разметке.

<TextBlock x:Name="txt" FontFamily="Times New Roman"

FontSize="18"> Фрагмент текста</TextBlock>

К эквивалентному результату приводит следующий код.

txt.FontFamily = "Times New Roman"; txt.FontSize = "18";

При задании шрифта сокращать имя нельзя. Например, нельзя ввести Times или Times New вместо Times New Roman.

Вместо имени семейства и свойства FontWeight можно ввести полное имя шрифта.

<TextBlock FontFamily="Times New Roman Bold"> Кнопка

</TextBlock>

Однако для определения нужного варианта рекомендуется задать имя семейства и набор свойств шрифта (в реальных приложениях чаще всего так и делают, поэтому имя семейства обычно считается именем шрифта). Например, приведенная ниже раз­метка (эквивалентна предыдущей) определяет семейство Times New Roman и присваи­вает свойству FontWeight значение FontWeights .Bold.

<TextBlock FontFamily="Times New Roman" FontWeight="Bold"> Кнопка

</TextBlock>

Стандартные шрифты

В Silverlight встроено девять базовых шрифтов (рис. 5.1), гарантирующих правиль­ный вывод в любых браузерах и операционных системах, поддерживающих Silverlight.

Рис. 5.1. Встроенные шрифты Silverlight

Шрифт Luc і da представлен двумя вариантами с немного разными именами. В Windows включен вариант Lucida Sans Unicode, а вариант Lucida Grande поч­ти идентичен шрифту, включенному в Mac OS X. Чтобы эта система была работоспособ­ной, в свойство FontFamily можно включать список имен шрифтов, разделенных запя­тыми, и Silverlight применит первый поддерживаемый шрифт. По умолчанию в элементе TextBlock свойство FontFamily имеет значение Lucida Sans Unicode, Lucida Grande.

Специализированные шрифты, которые могут быть установлены не на каждом клиентском компьютере, в Silverlight не разрешены. Если задать шрифт, отсутствую­щий в базовом наборе из девяти поддерживаемых шрифтов и не включенный в сбор­ку приложения (подробнее об этом в следующем разделе), параметры шрифта будут проигнорированы. Это произойдет независимо от того, установлен ли на клиентском компьютере шрифт с указанным именем. Данное ограничение имеет смысл, поскольку применение шрифта, поддерживемого только некоторыми системами, может привести к невозможности прочитать текст в других системах.

Внедрение шрифта

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

Внедрить шрифт в приложение несложно. В первую очередь нужно добавить файл шрифта (обычно он имеет расширение . ttf) в приложение и присвоить свойству Build Action значение Resource. В программе Visual Studio для этого нужно выделить имя файла шрифта в окне Solution Explorer (Проводник решений) и отредактировать свойство Build Action в окне Properties (Свойства).

Затем нужно присвоить свойству FontFamily значение в следующем формате.

имя_ файла_шрифта # имя_шрифта

Например, если в файл шрифта BayernFont. ttf включен шрифт Вауеrn, то вне­дрить его в приложение можно с помощью следующей разметки.

CTextBlock FontFamily="BayernFont.ttf#Bayern">

This is an embedded font

</TextBlock>

Результат показан на рис. 5.2.

Рис. 5.2. Вывод внедренного шрифта

Установить шрифт можно также с помощью потока ввода, содержащего файл шрифта. Для этого присвойте свойству TextBlock. FontSource поток файла шрифта, а свойству TextBlock.FontFamily — имя шрифта. Например, если в проект FontTest в качестве ресурса добавлен файл BayernFont. ttf, его можно извлечь программно с помощью следующего кода.

StreamResourcelnfo sri = Application.GetResourceStream( new Uri("FontTest;component/BayernFont.ttf", UriKind.Relative)) ;

lbl.FontSource = new FontSource(sri.Stream);

lbl.FontFamily = new FontFamily("Bayern");

Для извлечения ресурса из текущей сборки в коде применяется метод Application. GetResourceStream () и следующий синтаксис URI.

имя_сборки; компонент/имя_ресурса_шрифта

При любом способе внедрения применить пользовательский шрифт легко. Однако при внедрении возникают проблемы, связанные с лицензированием шрифтов. Большинство поставщиков шрифтов разрешают внедрять их в документы (например, в файлы PDF), но не в приложения (такие, как сборки Silverlight). Это объясняется тем, что пользова­тель легко может загрузить файл ХАР вручную, распаковать его, извлечь ресурс шрифта и работать с ним на своем компьютере. Разработчики платформы Silverlight даже не пы­тались учесть условия лицензирования шрифтов, однако, распространяя шрифт вместе с приложением, вы должны быть уверены в законности этой операции.

Проверьте лицензионные условия шрифта с помощью утилиты вывода свойств шрифтов, распространяемой компанией Microsoft бесплатно. Ее можно загрузить по адресу:

www.microsoft.com/typography/TrueTypeProperty21.mspx

Установив утилиту, щелкните правой кнопкой мыши на имени файла и выбери­те команду Properties (Свойства). Будет выведена подробная информация о шрифте. В частности, во вкладке Embedding (Внедрение) представлена информация о том, как разрешено внедрять данный шрифт. Шрифты, отмеченные как Installed Embedding Allowed (Внедрение установленного шрифта разрешено), можно включать в приложение Silverlight, а внедрение шрифтов, отмеченных как Editable Embedding Allowed (Внедрение редактируемого шрифта разрешено), может быть запрещено (хоть и не обязательно). Проконсультируйтесь с поставщиком шрифта об условиях его внедрения в приложение.

Примечание. Если договориться с поставщиком шрифта не удастся, вы можете обойти условия лицензирования, преобразовав шрифты в изображения. Такой способ хорошо подходит для небольших фрагментов текста (например, для заголовков), но не для больших блоков текста. Текст можно сохранить как растровое изображение в любой графической программе или преобразовать его в ряд фигур с помощью элемента Path, встроенного в Silverlight (см. главу 7). Преобразовать текст в контур (path) можно с помощью программы Expression Designer или Expression Blend, выделив элемент TextBlock и выбрав команду ObjectsPath=>Convert to Path (Объект?Контур?Преобразовать в контур). Эту же операцию можно выполнить в Silverlight с помощью кода. На странице www.tinyurl.com/69f74v приведен пример, в котором приложение Silverlight вызывает веб- службу, которая динамически генерирует контур текста. Служба возвращает данные контура в приложение Silverlight, которое выводит результат на экран.

Подчеркивание

Добавить подчеркивание в любой шрифт можно, присвоив свойству TextDecorations значение Underline.

<TextBlock ТехtDесогаtiоns="Under1іnе">Подчеркнутьій текст </TextBlock>

В WPF доступно несколько способов модификации текста, включая зачеркивание и проведение линии над текстом. Однако в Silverlight доступно только подчеркивание.

Чтобы подчеркнуть в блоке текста только одно слово, примените встроенный элемент, как описано в следующем разделе.

Форматирование фрагмента текстового блока

Во многих ситуациях возникает необходимость отформатировать только часть текста, при этом оставив ее в том же абзаце, что и остальное содержимое элемен­та TextBlock. Для решения этой задачи нужно применить объект Run в элементе TextBlock. Ниже приведена разметка, форматирующая разные слова по-разному. Результат показан на рис. 5.3.

CTextBlock FontFamily="Georgia" FontSize="22" > Тестовый <Run FontStyle="Italic" Foreground="YellowGreen"> пример</Run> форматирования

<Run FontFamily="Comic Sans MS" Foreground="Red"

FontSi ze=" 40" >текста</Run> </TextBlock>

Объект Run поддерживает те же свойства, что и TextBlock, включая Foreground, TextDecorations, и пять свойств шрифта (FontFamily, FontSize, FontStyle, Fontweight и Fontstretch).

Технически объект Run не является "истинным" элементом. Это всего лишь класс встраивания (inline). Платформа Silverlight предоставляет два класса встраивания: LineBreak и Run. В коде объекты Run, встроенные в элемент TextBlock, доступны по­средством коллекции TextBlock. Inlines. Фактически весь текст можно определить не только с помощью свойства Text, но и посредством коллекции Inlines. Однако не­обходимо учитывать, что изменение свойства влияет на коллекцию и наоборот.

Примечание. Из всей огромной модели документов WPF в Silverlight перешли только классы встраивания Run и LineBreak.

Перенос текста

Чтобы задать перенос на следующую строку текста, не поместившегося в теку­щей строке, используется свойство TextWrapping. По умолчанию оно имеет значение TextWrapping.NoWrap, в результате чего содержимое отсекается правой границей эле­мента. При значении TextWrapping.Wrap содержимое переносится на следующую стро­ку (естественно, если ширина элемента Textblock ограничена, например, пропорцио­нальной или фиксированной шириной ячейки контейнера Grid). При переносе элемент TextBlock разрывает строку на ближайшем пробеле. Если слово длиннее доступного пространства, элемент разрывает слово в произвольном месте (после последней поме­стившейся буквы).

При переносе текста учитываются значения свойств LineHeight и LineStacking- Strategy. Свойство LineHeight может определять фиксированную высоту в пикселях, применяемую к каждой строке. Однако значение LineHeight может только увеличить высоту строки. Если оно задает меньшую высоту, чем необходимо, оно игнорирует­ся. Значение LineStackingStrategy определяет, что элемент текстового блока бу­дет делать с многострочным содержимым, в котором используются разные шрифты. Значение MaxHeight задает стандартное поведение: каждая строка имеет высоту, достаточную для размещения символа, самого высокого в данной строке. При зна­чении BlockLineHeight все строки имеют одинаковую высоту, заданную значени­ем свойства LineHeight. Тогда над низким текстом получается свободное простран­ство, а высокий текст перекрывается соседней строкой. Разные варианты значений LineStackingStrategy показаны на рис. 5.4.

Рис. 5.3. Форматирование фрагментов текста

Рис. 5.4. Два разных способа определения высоты строки

Источник: Мак-Дональд, Мэтью. Silverlight 3 с примерами на С# для профессионалов. : Пер. с англ. —- М. : ООО «И.Д. Вильяме», 2010. — 656 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии