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
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.
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.
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
I believe FontStretch doesn't work for all fonts.