【发布时间】: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,也许值得一试<RichTextBox UndoLimit="50" />作为测试。 -
不幸的是,这确实没有解决问题。
-
我测试了零延迟。您在哪里分配文本更改事件。为什么是一个空事件?认为你有其他事情发生。
-
@Blam:它有一些我随后注释掉的东西。我在我的 Window 子类的构造函数中分配它。我知道它不会在所有系统上重现。
标签: c# wpf richtextbox .net-4.5