【问题标题】:RichTextBox input is very laggyRichTextBox 输入非常滞后
【发布时间】:2013-06-12 02:15:46
【问题描述】:

我有一个RichTextBox,其中包含非常少量的文本(少于 100 个字符,包括行尾)。我有一个事件(TextChanged 的主体为空),没有样式,而且窗口非常简单。

<Window x:Class="W.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow">
    <TabControl HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Name="FileTabControl">
        <TabItem Header="TabItem">
            <RichTextBox AcceptsReturn="True"  HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Name="SampleTextBox">
                <RichTextBox.Resources>
                    <Style TargetType="{x:Type Paragraph}">
                        <Setter Property="Margin" Value="0"/>
                    </Style>
                </RichTextBox.Resources>
            </RichTextBox>
        </TabItem>
    </TabControl>
</Window>

就是这样。

但是当我在 RichTextBox 中输入代码时,感觉非常卡顿和卡顿。我读过很多其他人在非常相似的情况下遇到 WPF 的 RTB 性能问题,但他们似乎都没有找到解决方案。

只是为了说明,我可以使用 AvalonEdit 之类的东西,但我无法解析 LGPL 是否意味着它在商业项目中不可用,而且我还需要语法高亮和基于非托管代码的东西,而不是定义语法突出东西。

【问题讨论】:

  • 您是否尝试过在RichTextBox 上设置较低的UndoLimit,我在TextBoxes 上发现这可以大大提高输入性能,因为我认为默认值为int.MaxValue,也许值得一试&lt;RichTextBox UndoLimit="50" /&gt; 作为测试。
  • 不幸的是,这确实没有解决问题。
  • 我测试了零延迟。您在哪里分配文本更改事件。为什么是一个空事件?认为你有其他事情发生。
  • @Blam:它有一些我随后注释掉的东西。我在我的 Window 子类的构造函数中分配它。我知道它不会在所有系统上重现。

标签: c# wpf richtextbox .net-4.5


【解决方案1】:

您还可以在 Windows 窗体中使用 RichtTextBox,它的运行速度更快。但这可能不是最漂亮的解决方案。

【讨论】:

    猜你喜欢
    • 2012-02-22
    • 2014-03-19
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多