.net 删除WPF富文本框中的隐藏字符
(由于这个问题一直没有得到任何答案,我重新措辞了) 在我的应用程序中,我有一个对话框,其中包含一个富文本框,该框中充满了从Twitter收集的Tweet。使用tweet实体,我对tweet进行格式化,使其具有指向tweet中链接、提及和hashtags的在线超链接。然而,超链接从未正确定位;始终是2或3个字符太快和太远 这是我用来设置富文本框中文本的代码:.net 删除WPF富文本框中的隐藏字符,.net,wpf,vb.net,twitter,flowdocument,.net,Wpf,Vb.net,Twitter,Flowdocument,(由于这个问题一直没有得到任何答案,我重新措辞了) 在我的应用程序中,我有一个对话框,其中包含一个富文本框,该框中充满了从Twitter收集的Tweet。使用tweet实体,我对tweet进行格式化,使其具有指向tweet中链接、提及和hashtags的在线超链接。然而,超链接从未正确定位;始终是2或3个字符太快和太远 这是我用来设置富文本框中文本的代码: TweetText.Document.ContentEnd.InsertTextInRun(Status.Text) Dim FlowDoc
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
这是我的富文本框XAML:
<RichTextBox Name="TweetText" Margin="5" FontSize="14" BorderThickness="0" IsReadOnly="True" />
这是输出:
tweet实体对每个实体都有适当的索引,但我确实认为富文本框中隐藏的字符导致了这种偏移。有趣的是,没有人回答这个问题,但我有点明白了,因为
richtextbox
使用起来非常麻烦。我现在也有一个问题
因此,您是对的,RichTextBox
确实使用隐藏字符,但您不应该尝试删除它们,因为它们有助于它的工作方式。编制索引时,只需计算字符符号,而不需要计算其他不可见的标记和符号
我对VB不是很在行,但只有当你的TextPointer.GetPointerContext(LogicalDirection.Forward)
是TextPointerContext.Text
时,你才能使用for循环并增加你的索引,否则,你就跳过它
这样,您的索引将与文本中的索引相匹配。在将近10年后
好的,我会做的:D
出于我的目的,我的所有文本总是在一个段落中,因此使用此代码,我只检查其内容(当然可以修改为检查所有段落):
好的,我试试看。我现在不使用Windows电脑,但当我回到一台时,我会检验你的理论。谢谢
public static string GetText(this RichTextBox richTextBox)
{
string textWithoutHiddenSymbols = "";
Paragraph p = (Paragraph)richTextBox.Document.Blocks.FirstBlock;
if (p != null)
{
InlineCollection inlines = p.Inlines;
foreach (var inline in inlines)
{
textWithoutHiddenSymbols += (inline as Run)?.Text;
}
}
return textWithoutHiddenSymbols;
}