2012-04-24 90 views
0

我想用我的RichTextBox中的超链接替换常规链接,所有信息都通过外部库(LinkEntity)提供给我。但我不知道如何去替换文字。将文本替换为WPF RichTextBox中的超链接

我有这个,但它不能正常工作,有时它会抛出一个值不能为空的异常,有时它只是取代了链接的错误部分。

 Dim Start As TextPointer = TweetText.Document.ContentStart 
     Dim StartPos As TextPointer = Start.GetPositionAtOffset(LinkEntity.StartIndex) 
     Dim EndPos As TextPointer = Start.GetPositionAtOffset(LinkEntity.EndIndex) 
     Dim h As New Hyperlink(StartPos, EndPos) 
     AddHandler h.MouseLeftButtonDown, AddressOf Hyperclick_Link 
     h.NavigateUri = New Uri(LinkEntity.Url) 
     h.Cursor = Cursors.Hand 

异常抛出,因为StartPos和EndPos都不算什么,即使开始和结束指数有一个有效的价值。

+0

是否有原因要更改?为什么RichTextBox链接没有改变就无法正常工作? – Rhyous 2012-04-24 04:50:25

回答

1

我发现问题,TweetText.Document在我声明StartPos和EndPos时调用它时没有任何价值。我的最终代码如下所示:

Dim FlowDocument As New FlowDocument 
Dim Paragraph As New Paragraph 
Paragraph.Inlines.Add(myfireactions.FormatTweet(Tweet)) 
FlowDocument.Blocks.Add(Paragraph) 

Dim Start As TextPointer = FlowDocument.ContentStart 
Dim StartPos As TextPointer = Start.GetPositionAtOffset(LinkEntity.StartIndex + 2) 
Dim EndIndexInt As Integer = LinkEntity.StartIndex + LinkEntity.DisplayUrl.Length + 2 
Dim EndPos As TextPointer = Start.GetPositionAtOffset(EndIndexInt, LogicalDirection.Backward) 
Dim h As New Hyperlink(StartPos, EndPos) 
AddHandler h.MouseLeftButtonDown, AddressOf Hyperclick_Link 
h.NavigateUri = New Uri(LinkEntity.Url) 
h.Cursor = Cursors.Hand 

TweetText.Document = FlowDocument 
相关问题