【问题标题】:WPF TextFormattingOptions.Display changes the letter spacingWPF TextFormattingOptions.Display 更改字母间距
【发布时间】:2023-03-21 07:45:02
【问题描述】:

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

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

虽然使用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>

【问题讨论】:

  • 我更喜欢在 WPF 中将TextFormattingMode="Display"SnapsToDevicePixels="true" 设置为Window 级别,并让它继承所有元素。在顶层组合的这两种设置似乎为桌面应用程序上的 WPF 提供了“最佳”、最不模糊的渲染。 TextFormattingMode.Ideal 真的只是为了在超高分辨率显示器上看起来不错,比如手机恕我直言。

标签: wpf text-rendering


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回答。如果我的示例使用 12pt,那么从您的回答中可以得出我应该使用 TextFormattingMode,Display - 但这会导致间距问题。
  • 然后使用 Ideal,它看起来非常适合 12pt。还要检查更长的字符串,而不仅仅是一个“大小”字。
猜你喜欢
  • 1970-01-01
  • 2011-12-11
  • 1970-01-01
  • 1970-01-01
  • 2014-12-06
  • 2011-07-05
  • 2016-10-07
相关资源
最近更新 更多