WPF RichTextBox 字体按 3/4 缩放
WPF RichTextBox font scaled by 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?每当我 read/write 来自此控件的字体大小时,我应该乘以和除以这个通用常数吗?
您指定的 FontSize
应为 DIP(与设备无关的像素)。
https://www.codeproject.com/articles/43520/device-independent-units-to-points-to-inches.aspx
https://msdn.microsoft.com/en-us/library/system.windows.controls.control.fontsize(v=vs.110).aspx
当 RichTextBox
被赋予一个尺寸时,它 calculates/maps 它回到最接近的点尺寸来使用。
因此您需要进行计算以计算 DIP 值,最终会在 RichTextBox
.
中给出您想要的 "PointSize"
double sizeindips = (double) new FontSizeConverter().ConvertFrom("8.5pt");
当在 XAML.
中使用 "pt" 后缀指定大小时,这实际上是 "converter" 下面调用的内容
我有一个 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?每当我 read/write 来自此控件的字体大小时,我应该乘以和除以这个通用常数吗?
您指定的 FontSize
应为 DIP(与设备无关的像素)。
https://www.codeproject.com/articles/43520/device-independent-units-to-points-to-inches.aspx
https://msdn.microsoft.com/en-us/library/system.windows.controls.control.fontsize(v=vs.110).aspx
当 RichTextBox
被赋予一个尺寸时,它 calculates/maps 它回到最接近的点尺寸来使用。
因此您需要进行计算以计算 DIP 值,最终会在 RichTextBox
.
double sizeindips = (double) new FontSizeConverter().ConvertFrom("8.5pt");
当在 XAML.
中使用 "pt" 后缀指定大小时,这实际上是 "converter" 下面调用的内容