Я хочу реализовать что-то, что программно изменяет фон текста при наличии строки документа. (Что-то, что очень похоже на выделение блока текста. проектирование). Я не хочу использовать выбор, так как он заставляет текстовое поле прокручиваться.
Я думаю, что мне нужно использовать 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 когда-либо изменяется, пока я просматриваю эту строку, она не выделяет обновленную строку, пока я не прокрутлю до другой части документа (скрывая обновленную строку) и не вернусь к обновленной строке.
Кроме того, как мне сделать, чтобы номера строк начинались с нуля?