C# WPF RichTextBox 将文本格式限制为可见文本

发布于 2024-11-30 00:45:03 字数 632 浏览 3 评论 0原文

我有一个 RichTextBox,显示一个很大的 FlowDocument(>10k 行)。我正在尝试将文本格式应用于整个文档。这需要一段时间才能完成。

有什么方法可以将格式仅集中在文档的可见部分吗?

信息:我正在尝试搜索 RichTextBox 的内容并突出显示所有匹配的匹配项。搜索功能基于 这个一个。我使用以下代码来“突出显示”找到的每个匹配项。

protected void ColorTextRanges(Color color)
{
    foreach ( var textRange in locatedInstances )
    {
        if ( textRange != null )
        {
            textRange.ApplyPropertyValue( TextElement.BackgroundProperty, new SolidColorBrush( color ) );
        }
    }
}

I have a RichTextBox displaying a FlowDocument that is large (>10k lines). I am attempting to apply text formatting to the entire Document. This is taking a while to complete.

Is there any way to focus the formatting on the visible parts of the Document only?

For Information: I am attempting to search through the contents of the RichTextBox and highlight all matching occurrences. The searching function is baised upon this one. I am using the following code to 'highlight' each match found.

protected void ColorTextRanges(Color color)
{
    foreach ( var textRange in locatedInstances )
    {
        if ( textRange != null )
        {
            textRange.ApplyPropertyValue( TextElement.BackgroundProperty, new SolidColorBrush( color ) );
        }
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦屿孤独相伴 2024-12-07 00:45:03

不要在循环中创建画笔,而是在外部创建画笔并重复使用它。虽然不会很重要,但应该会有所帮助。您可以测试BackgroundProperty,并且仅在错误时才设置它 - 这可能会使速度变慢,但如果文档的大部分已经是正确的颜色,那么它应该会有所帮助。

    protected void ColorTextRanges(Color color)
    {
        SolidColorBrush brush = new SolidColorBrush( color );
        foreach ( var textRange in locatedInstances )
        {
            if ( textRange != null )
            {
                textRange.ApplyPropertyValue( TextElement.BackgroundProperty,  brush);
            }
        }
   }

Rather than create the brush in the loop create it outside and reuse it. Not going to be major but should help a little. And you might test for the BackgroundProperty and only set it if it is wrong - this might make it slower but if most of the document is already the right color then it should help.

    protected void ColorTextRanges(Color color)
    {
        SolidColorBrush brush = new SolidColorBrush( color );
        foreach ( var textRange in locatedInstances )
        {
            if ( textRange != null )
            {
                textRange.ApplyPropertyValue( TextElement.BackgroundProperty,  brush);
            }
        }
   }
七堇年 2024-12-07 00:45:03

我发现最好的性能提升是在屏幕上未显示输出时更新文档。不确定为什么会这样,但我可以猜测屏幕缓冲区中的某些内容没有被更新。

The best performance increase I found was to update the document when out wasn't displayed on the screen. Not sure sure why this is but I can guess that some thing in the screen buffer isn't being updated.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文