2010-06-01 19 views
16

Estoy intentando configurar FontStretch propiedad en un TextBlock en WPF pero parece que no funciona. Intenté Expanded, Condensed, etc. pero la apariencia del texto no cambia.¿Por qué FontStretch no funciona en WPF?

Estoy trabajando en Windows XP con Framework 4.0 y probado con Verdana y Arial.

¿Funciona solo en Windows 7 o solo con algunas fuentes específicas?

EDITAR: Si no funciona con todas las fuentes, es que hay una lista de fuentes compatibles con esta característica? ¿O es posible modificar una fuente como Verdana/Arial para que sea compatible?

Respuesta

20

para conseguir un efecto similar al FontStretch en una fuente que no lo soporta, se puede utilizar un LayoutTransform en el 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}" /> 

Esto también se puede ajustar en un estilo, si usted quiere tener todo el texto en TextBlocks aparecer condensa:

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

Creo que FontStretch no funciona con todas las fuentes.

5

diferencia de propiedades de fuente como negrita o cursiva, WPF no simula propiedades de la fuente tales como estiramiento o casquillos pequeños. La fuente utilizada debe ser compatible con esto.

Para ver qué fuentes son compatibles con FontStretch, deberá buscar fuentes que tengan un archivo de fuente separado, p. Ej. Condensado o expandido. Y solo funcionarán las fuentes TrueType/OpenType debidamente enlazadas. Algunos proveedores de fuentes no vinculan adecuadamente las variantes estiradas o condensadas de sus fuentes a la versión normal, por lo que WPF no tiene idea de que estas variantes de fuentes estén relacionadas.

3

Mediante la medición de un texto (TextBlock.Measure), me parece que es Arial Narrow × 0,82 de la anchura de Arial.

Así que textBlock.LayoutTransform = new System.Windows.Media.ScaleTransform(0.82, 1.0); cuando se aplica a Arial puede aproximarse a Arial Narrow.

Cuestiones relacionadas