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キャストと除算以降、1行または2行で欠落することがあります...

どんな助けでも大歓迎です

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 に答える