Почему FontStretch не работает в WPF? - PullRequest
16 голосов
/ 01 июня 2010

Я пытаюсь установить свойство FontStretch для TextBlock в WPF, но кажется, что оно не работает. Я пробовал Expanded, Condensed и т. Д., Но внешний вид текста не меняется.

Я работаю на Windows XP с Framework 4.0 и протестировал как Verdana, так и Arial.

Работает ли он только в Windows 7 или только с некоторыми конкретными шрифтами?

EDIT : если он работает не со всеми шрифтами, есть ли список шрифтов, которые поддерживают эту функцию? Или можно изменить шрифт, например Verdana / Arial, для его поддержки?

Ответы [ 5 ]

25 голосов
/ 05 июня 2010

Чтобы получить эффект, аналогичный FontStretch, в шрифте, который его не поддерживает, вы можете использовать LayoutTransform для TextBlock:

<Application.Resources>
  <ScaleTransform x:Key="FontStretchCondensed" ScaleX="0.8" />
  <ScaleTransform x:Key="FontStretchExpanded" ScaleX="1.2" />
</Application.Resources>

...

<TextBlock Text="This is my text"
           LayoutTransform="{StaticResource FontStretchCondensed}" />

Это также можно установить в стиле, если вы хотите, чтобы весь текст в TextBlocks казался сжатым:

<Style TargetType="TextBlock">
  <Style.Setters>
    <Setter Property="LayoutTransform" Value="{StaticResource FontStretchCondensed}" />
  </Style.Setters>
</Style>
6 голосов
/ 01 июня 2010

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

Чтобы узнать, какие шрифты поддерживают FontStretch, вам нужно найти шрифты, которые имеют отдельный файл шрифтов, например, для. Сгущенный или расширенный. И тогда будут работать только правильно связанные шрифты TrueType / OpenType. Некоторые поставщики шрифтов неправильно связывают растянутые или сжатые варианты своих шрифтов с обычной версией, поэтому WPF не подозревает, что эти варианты шрифтов связаны между собой.

3 голосов
/ 02 мая 2012

Измеряя некоторый текст (TextBlock.Measure), я обнаружил, что Arial Narrow составляет × 0,82 ширины Arial.

Так что textBlock.LayoutTransform = new System.Windows.Media.ScaleTransform(0.82, 1.0); применительно к Arial может приближаться к Arial Narrow.

2 голосов
/ 01 июня 2010

Работает только для шрифтов OpenType. Для получения дополнительной информации:

http://en.wikipedia.org/wiki/OpenType

http://www.adobe.com/type/opentype/

http://www.microsoft.com/typography/WhatIsOpenType.mspx

2 голосов
/ 01 июня 2010

Я считаю, что FontStretch работает не для всех шрифтов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...