【发布时间】:2023-03-08 11:54:01
【问题描述】:
我正在尝试使用 AvalonEdit 创建自定义超链接。我创建了一个识别语法的生成器(基于示例),我可以设置一个 Uri:
public class LinkGenerator : VisualLineElementGenerator
{
readonly static Regex imageRegex = new Regex(@"<mylink>", RegexOptions.IgnoreCase);
public LinkGenerator()
{}
Match FindMatch(int startOffset)
{
// fetch the end offset of the VisualLine being generated
int endOffset = CurrentContext.VisualLine.LastDocumentLine.EndOffset;
TextDocument document = CurrentContext.Document;
string relevantText = document.GetText(startOffset, endOffset - startOffset);
return imageRegex.Match(relevantText);
}
/// Gets the first offset >= startOffset where the generator wants to construct
/// an element.
/// Return -1 to signal no interest.
public override int GetFirstInterestedOffset(int startOffset)
{
Match m = FindMatch(startOffset);
return m.Success ? (startOffset + m.Index) : -1;
}
/// Constructs an element at the specified offset.
/// May return null if no element should be constructed.
public override VisualLineElement ConstructElement(int offset)
{
Match m = FindMatch(offset);
// check whether there's a match exactly at offset
if (m.Success && m.Index == 0)
{
var line = new VisualLineLinkText(CurrentContext.VisualLine, m.Length);
line.NavigateUri = new Uri("http://google.com");
return line;
}
return null;
}
}
但是有两个问题我似乎无法弄清楚:
我应该将什么传递给 VisualLineLinkText 构造函数以简化文本为“MyLink”?
我应该在哪里放置一个将接收 RequestNavigateEventArgs 的事件处理程序,以便我可以覆盖点击行为?
【问题讨论】:
标签: c# wpf avalonedit