代码之家  ›  专栏  ›  技术社区  ›  Drake

为什么fontStretch在WPF中不工作?

  •  16
  • Drake  · 技术社区  · 14 年前

    我正在试着设置 弹力绷带 属性,但它似乎不起作用。我尝试了扩展、压缩等,但文本外观不变。

    我正在用框架4.0开发WindowsXP,并用Verdana和Arial进行了测试。

    它是只在Windows7上工作,还是只使用某些特定的字体?

    编辑 :如果不适用于所有字体,是否有支持此功能的字体列表?或者可以修改Verdana/Arial之类的字体来支持它吗?

    5 回复  |  直到 11 年前
        1
  •  24
  •   Daniel    11 年前

    要在不支持fontStretch的字体中获得类似效果,可以在文本块上使用layoutTransform:

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

    如果希望文本块中的所有文本都显示为压缩文本,也可以在样式中设置:

    <Style TargetType="TextBlock">
      <Style.Setters>
        <Setter Property="LayoutTransform" Value="{StaticResource FontStretchCondensed}" />
      </Style.Setters>
    </Style>
    
        2
  •  6
  •   Ruben    14 年前

    与粗体或斜体等字体属性不同,WPF不模拟拉伸或小大写等字体属性。所使用的字体必须支持它本身。

    要查看哪些字体支持fontStretch,您需要查找具有单独字体文件的字体,例如压缩或扩展字体。然后,只有正确链接的TrueType/OpenType字体才能工作。一些字体供应商没有将其字体的拉伸或压缩变体正确链接到常规版本,因此WPF不知道这些字体变体是相关的。

        3
  •  3
  •   Mark Cranness    12 年前

    通过测量一些文本(textblock.measure),我发现Arial Narrow的宽度是0.82。

    所以 textBlock.LayoutTransform = new System.Windows.Media.ScaleTransform(0.82, 1.0); 当应用于Arial时,可能近似于Arial Narrow。

        4
  •  2
  •   Stefan Szasz    14 年前

    我认为fontstretch不适用于所有字体。