我正在使用Windows Phone 8.1应用程序,我遇到了这个问题:
我有一个RichTextBlock
控件来保存我的文字,如果我的控制高度大于我的屏幕,我需要在用户阅读文本时自动逐行滚动。
有没有办法确定RichTextBlock
或几何计算中的行数是唯一的方法?
我试图遍历Blocks集合,但似乎没什么关系。
我唯一提到的是使用TextPointer.GetCharacterRect
函数:
if(msgContainer.Blocks.Any())
{
var item = msgContainer.Blocks.FirstOrDefault();
var height = item.LineHeight;
var startRect = item.ContentStart.GetCharacterRect(LogicalDirection.Forward);
var lineHeight = startRect.Height;
var lineCount = (int)_fatAssTextMessage.ActualHeight / lineHeight;
}
但它并不准确 - 有时它会因为int铸造和分裂而被线或两线错过......
任何帮助将不胜感激
答案 0 :(得分:1)
如果您在之后进行了 ,那么您将获得更准确的计数:
var lineCount = (int)(_fatAssTextMessage.ActualHeight / lineHeight);
目前您正在将实际高度转换为整数,然后然后进行除法,这将始终低估行数。
这也会偶尔低估 - 当你看到半条线时。为确保您始终获得尽可能大的值,请执行以下操作:
var lineCount = (int)Math.Ceiling(_fatAssTextMessage.ActualHeight / lineHeight);
[
Math.Ceiling
]返回大于或等于指定的双精度浮点数的最小整数值。