0

我正在开发 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 强制转换和除法......

任何帮助将不胜感激

4

1 回答 1

1

如果您在完成除法进行演员表,您将获得更准确的计数:

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

目前,您将实际高度转换为整数,然后进行除法,这总是会低估行数。

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

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

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

资源

于 2015-12-22T10:09:50.433 回答