我目前正在使用虚拟化ListBox作为文本输出窗口 - 基本上是RichTextBox的替代品,因为RichTextBox非常慢,并且没有有效的替代品 - 请参阅此问题:How do I increase performance of FlowDocumentScrollViewer?。
我遇到的问题是当打印非常大的字符串时,保存字符串的ListBoxItem的高度也会增加,因为它的宽度被限制在窗口内。随着ListBoxItem的高度增加,ListBox本身的滚动行为会迅速降低实用性,并且会出现许多错误。当ListBoxItem的高度接近ListBox的高度时,我得到闪烁,而ListBox似乎不知道如何渲染该项 - 在我切换标签并返回之前,文本是不可选择的。有时需要多次尝试。由于虚拟化,滚动条本身的大小发生了巨大变化 - 它不知道ListBox的其他项目是否小得多,因此滚动条太大,直到滚动到ListBoxItems小得多的文本部分。总的来说,用户体验降级到不可接受的程度。
所以我的问题是:我该如何解决这个问题呢? 是否有办法强制执行截止高度,以便将长字符串拆分为多个ListBoxItem?关闭虚拟化不是一种选择,因为虚拟化能够为我提供打印数万个所需的性能我的应用程序的文本行没有任何减速。
此外,在任何人指出我可能会回答这个问题的“重复问题”之前,我已经看过Constraining item heights in WPF ListBox, with indicator - 这是我能找到的唯一相关问题,并没有回答我的问题(它简单地限制高度,切割内容,这是不可接受的。)