RichTextBlock文本行数

时间:2015-12-22 09:27:22

标签: c# xaml windows-phone-8.1 richtextblock

我正在使用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铸造和分裂而被线或两线错过......

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

如果您在之后进行了 ,那么您将获得更准确的计数:

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

目前您正在将实际高度转换为整数,然后然后进行除法,这将始终低估行数。

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

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

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

Source