2010-06-01 13 views
16

Ich versuche Einstellung FontStretch Eigenschaft auf einem TextBlock in WPF, aber es scheint, dass es nicht funktioniert. Ich habe Expanded, Condensed usw. versucht, aber die Textdarstellung ändert sich nicht.Warum FontStretch in WPF nicht funktioniert?

Ich arbeite an Windows XP mit Framework 4.0 und getestet sowohl mit Verdana und Arial.

Funktioniert es nur unter Windows 7 oder nur mit bestimmten Schriftarten?

BEARBEITEN: Wenn es nicht mit allen Schriftarten funktioniert, gibt es eine Liste von Schriftarten, die diese Funktion unterstützen? Oder ist es möglich, eine Schriftart wie Verdana/Arial zu modifizieren, um es zu unterstützen?

Antwort

20

Um einen ähnlichen Effekt zu Fontstretch in einer Schriftart zu erhalten, die es nicht unterstützt, können Sie eine Layout auf dem Textblock verwenden:

<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}" /> 

Dies kann auch in einem Stil festgelegt werden, wenn Sie wollen der gesamte Text in Textblocks kondensiert erscheinen:

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

Ich glaube, dass FontStretch nicht für alle Schriftarten funktioniert.

5

Anders als Schrifteigenschaften wie fett oder kursiv, WPF nicht simuliert Schrifteigenschaften wie Stretch oder Small-Caps. Die verwendete Schriftart muss dies selbst unterstützen.

Um zu sehen, welche Schriftarten FontStretch unterstützen, müssen Sie nach Schriftarten suchen, die eine separate Schriftartdatei für z. Verkürzt oder erweitert. Und dann funktionieren nur korrekt verknüpfte TrueType/OpenType-Schriftarten. Einige Schriftartenanbieter verbinden gedehnte oder verkürzte Varianten ihrer Schriftarten nicht ordnungsgemäß mit der regulären Version, sodass WPF keine Ahnung hat, dass diese Schriftvarianten verwandt sind.

3

Durch einen Text (TextBlock.Measure) gemessen wird, finde ich, dass Arial × 0,82 die Breite Arial Narrow ist.

Also textBlock.LayoutTransform = new System.Windows.Media.ScaleTransform(0.82, 1.0); wenn auf Arial angewendet könnte Arial Narrow annähern.

Verwandte Themen