0

背景または前景のプロパティを RichTextBox の最新のシンボルに設定したいと考えています。

入力の前にキャレット位置を保存してから、そのようにテキスト範囲を取得することで、最新のテキスト範囲を取得しようとしました: new TextRange(previousCaret, currentCaret).

ただし、これはバグが発生しやすい決定です。キャレットの位置が時間内に更新されなかった場合 (たとえば、非常に速く入力して同時にボタンを押した場合)、実際には 2 つ以上の最後の記号を取得できるためです。

さて、最新のシンボルの TextRange を取得する必要さえないのでしょうか? いくつかの組み込みメソッドのように、他の方法はありますか?

では、最新のシンボルのプロパティを適切に変更するにはどうすればよいでしょうか?

4

1 に答える 1

0

最新の TextRange を取得するには、次のコードを使用します。

private TextRange LatestSymbol
{
    get
    {
        var previous = InputString.CaretPosition.GetPositionAtOffset(-1);

        if (previous != null)
        {    
             return new TextRange(
                      previous,
                      InputString.CaretPosition
                    );
                }
            return null;
        }
    }
}

ここで重要なのは、CaretPosition.GetPositionAtOffset(-1) が currentPosition の 1 シンボル後ろの位置を返すことです。

そして、これはうまく機能し、バグもありません。

于 2019-03-04T21:05:28.220 に答える