【发布时间】:2013-02-03 19:17:10
【问题描述】:
我有一个相对较大的文本。我需要将一定数量的此文本添加到文本框中,以便无需滚动即可看到它,然后将其余文本添加到另一个文本框,然后再添加另一个 -.-.-.> 循环遍历生成尽可能多的文本框的文本有必要的。
我的问题是我不知道如何找出每个文本框中有多少文本。到目前为止,我唯一能做的就是分配固定数量的适合页面的字符。但这不适用于不同的屏幕分辨率。有没有办法、技巧或解决方法我可以用来计算有多少文本可以放入具有固定字体和字体大小但相对宽度和高度的文本框中?
int TextLength = 1000, PageStart = 0;
List<TextBox> Pages = new List<TextBox>();
while (PageStart < TextLength)
{
TextBox p = new TextBox();
if (PageStart + PageLength < TextLength)
{
p.PageText = Text.Substring(PageStart, PageLength);
PageStart += PageLength;
Pages.Add(p);
}
else
{
PageLength = TextLength - PageStart;
p.PageText = Text.Substring(PageStart, PageLength);
Pages.Add(p);
break;
}
}
【问题讨论】:
-
您可能需要使用等宽字体才能使其工作,否则您需要做一些非常复杂的数学运算:/
-
如果我没有找到其他任何东西,monospace 将不得不这样做。我认为计算很简单。
-
您需要使用非等宽单独处理每个字符。还有一堆等宽字体:fontsquirrel.com/fonts/list/style/Monospaced
-
@ofstream 不一定。我相信有一些先例允许仅测量
ems 中的宽度(这应该是字体中最宽的字母。)所以如果你知道文本框可以容纳 20Ms 的任何字体,它非常可能它可以容纳至少 20 个所述字体中的任何字母。为了进一步简化它,Wikipedia article 似乎暗示M的边界框是一个具有字体磅值的矩形。似乎一个很好的猜测/下限可能是文本框的宽度除以字体高度。 -
嗯,这似乎行得通。
标签: c# textbox windows-runtime winrt-xaml