3

WPFリッチテキストボックスで発生するすべてのノーブレークスペースを強調表示しています。目的のテキスト範囲が見つかったら、次のように呼び出します。

textrange.ApplyPropertyValue(TextElement.BackgroundProperty, Brushes.DarkRed);

そしてそれはうまくいきます。ただし、ドキュメントの最後で強調表示が行われる場合は、新しく入力されたすべてのテキストも強調表示されます。これは問題です。誰かがこれを修正する方法の手がかりを持っていますか?

完全なコード:

private void HighLightNonbreakSpace()
    {
        var start = this.Document.ContentStart;
        char nonBreakSpace = System.Convert.ToChar(160);
        while (start != null && start.CompareTo(this.Document.ContentEnd) < 0)
        {
            if (start.GetPointerContext(LogicalDirection.Forward) == TextPointerContext.Text)
            {
                var match = start.GetTextInRun(LogicalDirection.Forward).IndexOf(nonBreakSpace);
                if (match >=0)
                {
                    var matchPos = start.GetPositionAtOffset(match, LogicalDirection.Forward);
                    var textrange = new TextRange(matchPos, matchPos.GetPositionAtOffset(1,LogicalDirection.Forward));
                    textrange.ApplyPropertyValue(TextElement.BackgroundProperty, Brushes.DarkRed);
                    start = textrange.End;
                }
            }
            start = start.GetNextContextPosition(LogicalDirection.Forward);
        }
    }
4

1 に答える 1

3

nbsps を強調表示するだけでなく、他のすべての強調表示を解除する必要があります。つまり、else ブランチをルーチンに追加します。デフォルトでは、新しく入力されたテキストはその前にあるものから属性を取得するため、最後に入力された文字が nbsp であるかどうかを確認し、それに応じてプロパティを設定する必要があります。

于 2012-05-14T19:05:45.257 に答える