WPF TextFormattingOptions.Display 改变字母间距

WPF TextFormattingOptions.Display changes the letter spacing

基于 this answer 关于 WPF 中文本模糊的问题,我尝试使用 TextOptions.TextFormattingMode = TextFormattingMode.Display,但似乎 它也改变了字母之间的间距:

TextFormattingMode.Display导致 ze 字符被混合到另一个:

虽然这 "blending" 使用 TextFormattingMode.Ideal 不会发生:

当放大文本时,差异变得更加明显(TextFormattingMode.Display 在左边):

该行为仅在使用 Segoe UI Semilight 且仅在 12pt 字体大小时出现。

为什么会这样?这是特定字体、WPF 渲染引擎的问题还是这实际上是想要的行为?

编辑:如果您想自己检查,这里有一些现成的示例代码:

<Grid>
    <Grid.Resources>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="FontFamily" Value="Segoe UI Semilight" />
            <Setter Property="FontSize" Value="12" />
        </Style>
    </Grid.Resources>

    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>

    <TextBlock Grid.Row="0"
               Text="size"
               TextOptions.TextFormattingMode="Display" />

    <TextBlock Grid.Row="1"         
               Text="size"
               TextOptions.TextFormattingMode="Ideal" />
</Grid>

这是实际想要的行为。你可以尝试用 "HELLO WORLD" 字符串做同样的事情,你就会知道真正的区别。使用这些模式的常见场景是:

  1. 大文本 (15pt+) - Ideal/Display 根据用户的喜好。
  2. 转换后的文本 - 理想
  3. 缩放文本 - 理想
  4. 设计方案 - 理想
  5. 小文本 - 显示