【发布时间】:2014-10-19 14:47:37
【问题描述】:
如何将超链接插入到 FlowDocument 的特定位置?新的超链接应该具有与周围文本相同的格式 - 除了颜色(应该始终为蓝色)和下划线(应始终为下划线)。插入超链接后,光标应该在新的超链接之后。
我尝试过的事情:
TextPointer caretPosition = richTextBox.CaretPosition;
TextPointer insertPosition = caretPosition.IsAtInsertionPosition ? caretPosition : caretPosition.GetInsertionPosition(LogicalDirection.Forward);
string linkTitle = "Stack Overflow";
Run run = new Run(linkTitle);
Hyperlink link = new Hyperlink(run, insertPosition);
link.IsEnabled = true;
link.NavigateUri = new Uri(@"http://www.stackoverflow.com");
richTextBox.CaretPosition = run.ContentEnd;
这可行,但新的超链接没有其周围文本的格式。
this.CaretPosition = this.CaretPosition.GetPositionAtOffset(0, LogicalDirection.Forward);
insertPosition.InsertTextInRun(linkTitle);
Hyperlink link = new Hyperlink(insertPosition, insertPosition.GetPositionAtOffset(linkTitle.Length));
link.IsEnabled = true;
link.NavigateUri = new Uri(@"http://www.stackoverflow.com");
TextPointer positionAfterLink = link.ContentEnd.GetPositionAtOffset(1);
if (!positionAfterLink.IsAtInsertionPosition)
positionAfterLink = caretPosition.GetInsertionPosition(LogicalDirection.Forward);
richTextBox.CaretPosition = positionAfterLink;
这样,格式就被保留了。但有时,CaretPosition 不会设置在新链接的末尾,而是停留在新链接的前面。此外,它对我来说看起来不是很健壮。
有没有人成功做到这一点?这样做的正确方法是什么?
【问题讨论】:
标签: wpf hyperlink insert formatting flowdocument