开发者

Why FontStretch does not work in WPF?

I am trying setting FontStretch property on a TextBlock in WPF but it seems that it does not work. I tried Expanded, Condensed, etc. but the text appearance does not change.

I am working on Windows XP with Framework 4.0 and tested both 开发者_如何学Gowith Verdana and Arial.

Does it work only on Windows 7 or only with some specific fonts?

EDIT: If it does not work with all fonts, is there a list of fonts that support this feature? Or is it possible to modify a font like Verdana/Arial to support it?


To get a similar effect to FontStretch in a font that doesn't support it, you can use a LayoutTransform on the 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}" />

This can also be set in a style if you want to have all text in TextBlocks appear condensed:

<Style TargetType="TextBlock">
  <Style.Setters>
    <Setter Property="LayoutTransform" Value="{StaticResource FontStretchCondensed}" />
  </Style.Setters>
</Style>


Unlike font properties such as bold or italic, WPF does not simulate font properties such as stretch or small caps. The font used must support this itself.

To see which fonts support FontStretch, you'll need to look for fonts that have a separate font file for e.g. Condensed or Expanded. And then only properly linked TrueType/OpenType fonts will work. Some font vendors do not properly link stretched or condensed variants of their fonts to the regular version, so WPF has no idea that these font variants are related.


By measuring some text (TextBlock.Measure), I find that Arial Narrow is × 0.82 the width of Arial.

So textBlock.LayoutTransform = new System.Windows.Media.ScaleTransform(0.82, 1.0); when applied to Arial might approximate Arial Narrow.


I believe FontStretch doesn't work for all fonts.


It only works for OpenType fonts. For more information:

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

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

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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜