【发布时间】:2023-03-21 07:45:02
【问题描述】:
基于this answer关于WPF中文本模糊的问题,我尝试使用TextOptions.TextFormattingMode = TextFormattingMode.Display,但似乎它也会改变字母之间的间距:
TextFormattingMode.Display导致z 和e 字符被混合到另一个字符中:
虽然使用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