Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 删除WPF富文本框中的隐藏字符_.net_Wpf_Vb.net_Twitter_Flowdocument - Fatal编程技术网

.net 删除WPF富文本框中的隐藏字符

.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

(由于这个问题一直没有得到任何答案,我重新措辞了)

在我的应用程序中,我有一个对话框,其中包含一个富文本框,该框中充满了从Twitter收集的Tweet。使用tweet实体,我对tweet进行格式化,使其具有指向tweet中链接、提及和hashtags的在线超链接。然而,超链接从未正确定位;始终是2或3个字符太快和太远

这是我用来设置富文本框中文本的代码:

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;
}