有没有一种方法可以计算字体的真实高度?

时间:2018-12-26 21:46:45

标签: c# wpf

我遇到了一种情况,即使用垂直居中文本无法正确对齐。尤其是当字体大(即40)时。我可以通过在顶部应用负边距来解决此问题,但是有没有办法以编程方式计算边距的金额?我尝试获取FormattedText,但是数字与屏幕上显示的数字不匹配。

    <Border BorderBrush="Black" BorderThickness="1,1,1,1" Width="46" Height="46" UseLayoutRounding="True" SnapsToDevicePixels="True">
        <TextBlock FontFamily="Gadugi" Margin="0,-4,0,0" FontSize="36" Text="1" HorizontalAlignment="Center" VerticalAlignment="Center" />
    </Border>

-4解决了这种情况,但是我如何明智地计算-4代码呢?由于每种字体/每种字体大小都不同。

数字似乎与FormattedText中的数字不匹配。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用像这样的几何变换:

FormattedText text = new FormattedText("Your text",
    CultureInfo.CurrentCulture, FlowDirection.LeftToRight,
    new Typeface("Arial"), 20, Brushes.Black);
Geometry geometry = text.BuildGeometry(new Point());
double height = geometry.Bounds.Bottom - geometry.Bounds.Top;

但是,这将导致您输入的字符串的高度。这意味着“ abc”的高度比“ ABC”的矮“ Ay”