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投射和除法。。。

如有任何帮助,将不胜感激

RichTextBlock文本行计数

如果你在完成除法后进行铸造,你会得到更准确的计数:

var lineCount = (int)(_fatAssTextMessage.ActualHeight / lineHeight);

目前,您正在将实际高度强制转换为整数,然后执行除法,这将始终少计行数。

这也会偶尔被低估——当你看到半条线的时候。为了确保您始终获得尽可能大的价值,请执行以下操作:

var lineCount = (int)Math.Ceiling(_fatAssTextMessage.ActualHeight / lineHeight);

[Math.Ceiling]返回大于或等于指定双精度浮点数的最小整数值。