这个元素生成器将在每 20 列之后引入一个换行符:
public class WrapAtCol20 : VisualLineElementGenerator
{
public override int GetFirstInterestedOffset(int startOffset)
{
DocumentLine line = CurrentContext.Document.GetLineByOffset(startOffset);
int col = startOffset - line.Offset;
int wrapCol = ((col / 20) + 1) * 20;
if (wrapCol < line.Length) {
return line.Offset + wrapCol;
}
return -1;
}
public override VisualLineElement ConstructElement(int offset)
{
return new WrapElement();
}
class WrapElement : VisualLineElement
{
public WrapElement() : base(visualLength: 1, documentLength: 0)
{
}
public override TextRun CreateTextRun(int startVisualColumn, ITextRunConstructionContext context)
{
return new TextEndOfLine(1);
}
}
}
请注意,这可能与大写生成器的交互效果不佳- 一个生成器为整个文本生成单个元素,该元素将被大写,这会阻止其他生成器在其间插入元素。解决方案是更改 AvalonEdit,以便着色器可以处理大写字母。