0

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

私はこれを持っていますが、正しく機能しない場合があり、null例外にならない値をスローする場合もあれば、リンクの間違った部分を置き換えるだけの場合もあります。

        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

StartとEndのインデックスに有効な値がある場合でも、StartPosとEndPosは何もないため、例外がスローされます。

4

1 に答える 1

1

StartPosとEndPosを宣言するときにTweetText.Documentを呼び出したときに、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
于 2012-04-29T21:45:05.207 に答える