系统字体为125%时出现奇怪的文本缩放

Mik*_*nov 8 .net c# wpf

这是完整的应用程序xaml:

< Window x:Class="WpfApplication30.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow"
        Width="525"
        Height="350">
  < Border VerticalAlignment="Center"
          BorderBrush="Green"
          BorderThickness="1">
    < TextBlock Text="HELLO WORLD!"
               VerticalAlignment="Center"
               FontSize="16" />
  </Border>
</Window>
Run Code Online (Sandbox Code Playgroud)

当系统字体设置为125%时,文本不在边框的中心.顶部边框和文本之间有7个像素,底部边框和文本之间只有4个像素.我该如何解决?

UPD:补充道

UseLayoutRounding="True"
SnapsToDevicePixels="True"
Run Code Online (Sandbox Code Playgroud)

但是diffrenece仍然在这里:8px和6px

小智 3

字体垂直居中很复杂,因为它将TextBlock与所提供空间的中心对齐,以便所选字体中的任何字符都适合该区域。关于其原因的基本概述可以在维基百科基线(排版)文章中找到

\n\n

您可以尝试使用以下方法来补偿特定字体的指标

\n\n
    \n
  • GetEmHeight(FontStyle)
  • \n
  • GetCellAscent(FontStyle)
  • \n
  • GetCellDescent(FontStyle)
  • \n
  • GetLineSpacing(FontStyle)
  • \n
\n\n

在课堂上FontFamily。并调整 的位置TextBlock

\n\n

来源:如何:获取字体规格

\n\n

但我真的建议不要这样做,因为有些角色可能会使用这样的空间\xc3\x81,并且j具有不同的高度和线条位置。

\n\n

使用类似monospaced打印到边框中间的字体,您可能会有更好的默认布局体验。ConsolasHELLO WORLD!

\n