Подтвердить что ты не робот

Почему FontStretch не работает в WPF?

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

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

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

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

4b9b3361

Ответ 1

Чтобы получить аналогичный эффект для 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>

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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