2012-06-10 3 views
0

(Поскольку этот вопрос не получали никаких ответов, я заново сформулировать его)Удалить скрытые символы в WPF богатого текстового поле

В моем приложении, у меня есть диалог, который содержит Rich Text Box, то коробка заполнена Твиттером, собранным из Twitter. Используя твиты, я отформатирую твит, чтобы иметь встроенные гиперссылки на ссылки в твитах, упоминаниях и хэштегах. Однако гиперссылки никогда не располагаются правильно; всегда 2 или 3 символа слишком рано и слишком далеко.

Это код, я использую, чтобы установить текст в формате Rich Text Box:

TweetText.Document.ContentEnd.InsertTextInRun(Status.Text) 
Dim FlowDocument As FlowDocument = TweetText.Document 
If LinkEntity.Count > 0 Then 
      For Each Entity As Entities.TwitterUrlEntity In LinkEntity 
       Dim Start As TextPointer = FlowDocument.ContentStart 
       Dim StartPosition As TextPointer 
       Dim EndPosition As TextPointer 
       If Entity.StartIndex = 0 Then 
        StartPosition = Start.GetPositionAtOffset(Entity.StartIndex) 
       Else 
        StartPosition = Start.GetPositionAtOffset(Entity.StartIndex) 
       End If 
       EndPosition = Start.GetPositionAtOffset(Entity.StartIndex + Entity.DisplayUrl.Length, LogicalDirection.Backward) 
       Dim h As New Hyperlink(StartPosition, EndPosition) 
       AddHandler h.MouseLeftButtonDown, AddressOf Hyperclick_Link 
       h.NavigateUri = New Uri(Entity.Url) 
       h.Cursor = Cursors.Hand 
      Next 
     End If 
'I have the other entities here, they have very similar code' 
TweetText.Document = FlowDocument 

Это мой Rich Text Box XAML:

<RichTextBox Name="TweetText" Margin="5" FontSize="14" BorderThickness="0" IsReadOnly="True" /> 

Это выход:

The problem!

Объект tweet имеет соответствующие индексы для каждой сущности, но я считаю, что Ri ch Текстовое поле содержит скрытые символы, вызывающие это смещение.

ответ

1

Интересно, что никто не ответил на этот вопрос, но я как бы понял, потому что RichTextBoxes очень противны в использовании. В настоящее время у меня проблемы с одним.

Итак, вы правы, RichTextBox использует скрытые символы, но вы не должны пытаться их удалить, так как они помогают ему работать так, как он делает. Вы должны учитывать только символы символов при индексировании, а не другие невидимые теги и символы.

Я не очень хорошо знаком с VB, но вы можете использовать цикл for и увеличивать индекс только в том случае, если YourTextPointer.GetPointerContext(LogicalDirection.Forward) - TextPointerContext.Text, в противном случае вы просто пропустите его.

Таким образом, ваши индексы будут соответствовать текстам.

+0

Хорошо, я попробую это. Я сейчас вдалеке от компьютера с Windows, но когда я вернусь к одному, я испытаю вашу теорию. Благодаря! –