ドキュメントラインが提供されたときにテキストの背景をプログラムで変更するものを実装したい(テキストのブロック選択に非常によく似たもの。これをIDEのデバッグブレークポイントに使用します)設計)。テキストボックスがスクロールするため、selectionを使用する必要はありません。
DocumentColorizingTransformerを使用する必要があると思いますが、これをどのように行うかは100%わかりません。
public class ColorizeAvalonEdit : ICSharpCode.AvalonEdit.Rendering.DocumentColorizingTransformer
{
protected override void ColorizeLine(ICSharpCode.AvalonEdit.Document.DocumentLine line)
{
int lineStartOffset = line.Offset;
string text = CurrentContext.Document.GetText(line);
int start = 0;
int index;
if (line.LineNumber == LogicSimViewCodeWPFCtrl.currentLine)
{
while ((index = text.IndexOf(text, start)) >= 0)
{
base.ChangeLinePart(
lineStartOffset + index, // startOffset
lineStartOffset + index + text.Length, // endOffset
(VisualLineElement element) =>
{
element.TextRunProperties.SetBackgroundBrush(Brushes.Red);
});
start = index + 1; // search for next occurrence
}
}
}
}
currentLineは、強調表示される部分です。
上記のコードは正しく機能します。唯一の問題は、その行を表示しているときにcurrentLineが変更された場合、ドキュメントの別の部分にスクロールして(更新された行を非表示にする)、更新された行が強調表示されないことです。更新された行に。
また、行番号をゼロから開始するにはどうすればよいですか?