2012-04-24 11 views
0

通常のリンクをRichTextBox内のハイパーリンクに置き換え、すべての情報が外部ライブラリ(LinkEntity)を介して私に渡されます。しかし、私は実際にテキストを置き換える方法を知りません。WPFリッチテキストボックス内のハイパーリンクにテキストを置き換えます

私はこれを持っていますが、正しく動作しない場合があります。値がnull例外にならない場合があります。また、リンクの間違った部分が置き換えられることもあります。 StartPosとendposのは、開始と終了のインデックスが有効な値を持っているにもかかわらず、何もないので、

 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 

例外がスローされます。

+0

変更したい理由はありますか? RichTextBoxリンクが変更されずに正しく動作しないのはなぜですか? – Rhyous

答えて

1

StartPosとEndPosを宣言するときにTweetText.Documentが呼び出されたときに問題が見つかりました。私の最終的なコードは次のようになります:

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 
関連する問題