WPF RichTextBox字体缩放3/4 [英] WPF RichTextBox font scaled by 3/4

查看:21
本文介绍了WPF RichTextBox字体缩放3/4的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个WPF RichTextBox,我想让用户在其上更改字体大小:

void SetFontSize(double size)
{
    var selection = richTextBox.Selection;
    if (selection.IsEmpty)
        richTextBox.FontSize = size;
    else
        selection.ApplyPropertyValue(RichTextBox.FontSizeProperty, size);
}

在真实场景中,它嵌入在System.Windows.Forms.Integration.ElementHost()中,应该继承其WinForms父字体,但我可以在100%WPF场景中重现此问题。

问题是字体大小似乎是设置的大小的3/4。所以WinForms字体是8.5,它会将其转换为11 1/3。如果我读回字体大小,它会说是11.33333,但如果我将文本复制并粘贴到写字板中,它会说字体大小是8.5。

如果我尝试将字体重置回与父控件的8.5匹配,则它会将其设置为该字体的3/4,即6.375,太小而无法阅读。我必须将其设置为4/3*8.5才能使其与WinForms字体大小匹配。

我用10.0调用上面的示例代码,然后将文本复制到写字板中,它显示我有7.5磅的字体。以此类推。

我没有任何正在进行的UI缩放。Windows屏幕分辨率设置为100%。我重写了ElementHost父控件中的ScaleCore并设置了断点,它显示比例设置为1:1。

为什么它要将所有东西都扩展到3/4?这是一个通用常量吗?每当我从此控件读取/写入字体大小时,我都应该乘以除以。

推荐答案

您指定的FontSize应以DIPS(设备无关像素)为单位。

RichTextBox指定大小时,它会计算/映射回最近的磅大小以使用。

因此,您需要进行计算以计算倾斜值,这最终将在RichTextBox中为您提供所需的"PointSize"。

double sizeindips = (double) new FontSizeConverter().ConvertFrom("8.5pt");

当在XAML中使用"pt"后缀指定大小时,这实际上是"转换器"在下面调用的内容。

这篇关于WPF RichTextBox字体缩放3/4的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆