20

在 WPF 应用程序中,我想构建一个“在文件中查找”输出窗格,我可以在其中流式传输大量文本,而无需在每一行重新分配内存,就像TextBox会做的那样。

WPFTextBox有一个Text存储连续字符串的属性。每次,我想添加内容,我都需要做textBox.Text += "New Text",这很糟糕。

理想情况下,该控件将是虚拟的并且需要最少的资源,仅用于可见线。

我考虑过使用ListBox带有a 的标准VirtualizingStackPanel,但它不允许跨行文本选择。

(在添加的每一行,我希望控件更新)

有什么建议吗?

4

4 回答 4

18

如果您不希望应用程序中有超过一万个搜索结果,那么到目前为止,一个 TextBlock 控件或只读多行 TextBox 就足够了。

TextBox 类有一个 AppendText() 方法,该方法对您来说应该足够快。

如果您需要文本突出显示/格式化,那么也许您想使用 RichTextBox。

于 2009-09-12T00:46:20.067 回答
7

如果你有非常大的内容,那么不幸的是所有的 WPF 文本框和类似的控件都非常慢。看到这个问题。您可以使用AvalonEdit作为替代品。

于 2011-05-19T08:44:56.950 回答
0

您是否考虑或尝试过RichTextBox控件?

于 2009-09-11T21:06:33.800 回答
-2

一个 StringBuilder,只需将文本附加到 String builder 而不是做

textBox.Text += moreText;

myStringBuilder.Append(moreText);
textBox.Text = myStringBuilder.ToString();

这应该照顾到Schlemiel the Painter 的算法。

当然,字符串生成器必须是您的类的成员,以便它存在于您的对象的生命周期中。

于 2009-09-11T21:47:47.973 回答