C# 串宽测量方法不准确
我正在尝试将RichTextBox.PageWidth的大小限制为每行60个字符(固定宽度字体)。基本上,我测量字符串,然后将PageWidth设置为测量的量 当我使用它时,我的测量值相差2个字符。(最后2个字符换行到下一行。) 有人知道我如何在不将文本放入RichTextBox的情况下获得RichTextBox的字符串宽度吗 字符串测量方法(取自): 更新:C# 串宽测量方法不准确,c#,.net,wpf,string,C#,.net,Wpf,String,我正在尝试将RichTextBox.PageWidth的大小限制为每行60个字符(固定宽度字体)。基本上,我测量字符串,然后将PageWidth设置为测量的量 当我使用它时,我的测量值相差2个字符。(最后2个字符换行到下一行。) 有人知道我如何在不将文本放入RichTextBox的情况下获得RichTextBox的字符串宽度吗 字符串测量方法(取自): 更新: 进一步的测试表明,它始终关闭2个字符(对于4个字符或100个字符)。这让我相信RichTextBox在填充某些内容。很可能RichTex
进一步的测试表明,它始终关闭2个字符(对于4个字符或100个字符)。这让我相信RichTextBox在填充某些内容。很可能RichTextBox为了自己的布局目的消耗了一些水平宽度,导致您的计算总是有点短。这个问题的答案应该能帮助你解决问题
可能RichTextBox为了自己的布局而占用了一些水平宽度,这会导致您的计算总是有点短。这个问题的答案应该能帮助你解决问题
我使用这种方法,它可能不是最好的,但非常准确
private double MeasureText(string text, FontFamily font, double fontsize)
{
var mesureLabel = new TextBlock();
mesureLabel.FontFamily = font;
mesureLabel.FontSize = fontsize;
mesureLabel.Text = text;
mesureLabel.Padding = new Thickness(0);
mesureLabel.Margin = new Thickness(0);
mesureLabel.Width = double.NaN;
mesureLabel.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity));
mesureLabel.Arrange(new Rect(mesureLabel.DesiredSize));
return mesureLabel.ActualWidth;
}
用法:
double length = MeasureText("hello", FontFamily, FontSize);
我使用这种方法,它可能不是最好的,但它非常准确
private double MeasureText(string text, FontFamily font, double fontsize)
{
var mesureLabel = new TextBlock();
mesureLabel.FontFamily = font;
mesureLabel.FontSize = fontsize;
mesureLabel.Text = text;
mesureLabel.Padding = new Thickness(0);
mesureLabel.Margin = new Thickness(0);
mesureLabel.Width = double.NaN;
mesureLabel.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity));
mesureLabel.Arrange(new Rect(mesureLabel.DesiredSize));
return mesureLabel.ActualWidth;
}
用法:
double length = MeasureText("hello", FontFamily, FontSize);
你不能只使用TextRenderer.MeasureText吗?也许我遗漏了什么,但是除非你使用像Courier这样的固定宽度字体,否则60个字符的宽度取决于这些字符是什么。使用数字作为代理只能给出一个估计。“如果它在”通常会比“哇哇哇”占用更少的水平空间。@reedparkes-是的,我可以。但我不想加载那个DLL(这是一个“WinForms”DLL,这是WPF应用程序)。@hatchet-我更新了我的问题,表明这是使用固定宽度字体。抱歉@Vaccano,我完全错过了。你不能只使用TextRenderer.MeasureText吗?也许我遗漏了一些东西,但除非你使用像Courier这样的固定宽度字体,60个字符的宽度取决于这些字符是什么。使用数字作为代理只能给出一个估计。“如果它在”通常会比“哇哇哇”占用更少的水平空间。@reedparkes-是的,我可以。但我不想加载那个DLL(这是一个“WinForms”DLL,这是WPF应用程序)。@hatchet-我更新了我的问题,表明这是使用固定宽度字体。抱歉@Vaccano,我完全错过了。