RichTextBlock文本行计数
本文关键字:文本 RichTextBlock | 更新日期: 2023-09-27 18:27:51
我正在开发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投射和除法。。。
如有任何帮助,将不胜感激
如果你在完成除法后进行铸造,你会得到更准确的计数:
var lineCount = (int)(_fatAssTextMessage.ActualHeight / lineHeight);
目前,您正在将实际高度强制转换为整数,然后执行除法,这将始终少计行数。
这也会偶尔被低估——当你看到半条线的时候。为了确保您始终获得尽可能大的价值,请执行以下操作:
var lineCount = (int)Math.Ceiling(_fatAssTextMessage.ActualHeight / lineHeight);
[
Math.Ceiling
]返回大于或等于指定双精度浮点数的最小整数值。
源