在WPF应用程序中,我想构建一个“在文件中查找”输出窗格,在该窗格中我可以流式传输大量文本,而无需在每行重新分配内存,就像TextBox
那样。
WPF TextBox
有一个Text
属性,用于存储连续的字符串。每次,我想添加内容,我需要做textBox.Text += "New Text"
,这很糟糕。
理想情况下,该控制是虚拟的,只需要最少的资源,仅用于可见线。
我考虑过将标准ListBox
与VirtualizingStackPanel
一起使用,但它不允许跨行进行文字选择。
(在添加的每个新行中,我希望控件更新)
有什么建议吗?
答案 0 :(得分:17)
如果您的应用程序中的搜索结果不会超过一万个,那么TextBlock控件或只读多行TextBox就足够了。
TextBox类有一个AppendText()方法,应该足够快。
如果您需要文本突出显示/格式化,那么您可能想要使用RichTextBox。
答案 1 :(得分:5)
如果您的内容非常大,那么很遗憾,所有WPF文本框和类似控件都非常慢。见this question。您可以使用AvalonEdit作为替代。
答案 2 :(得分:0)
您是否考虑或尝试过RichTextBox控件?
答案 3 :(得分:-2)
StringBuilder,只需将文本附加到“字符串”构建器,而不是执行
textBox.Text += moreText;
做
myStringBuilder.Append(moreText);
textBox.Text = myStringBuilder.ToString();
这应该处理Schlemiel the Painter's算法。
当然,字符串构建器必须是您的类的成员,因此它存在于对象的生命周期中。