C# 对于大型ListBoxItems,ListBox滚动行为不好

C# 对于大型ListBoxItems,ListBox滚动行为不好,c#,wpf,xaml,listbox,listboxitem,C#,Wpf,Xaml,Listbox,Listboxitem,我目前正在使用虚拟化列表框作为文本输出窗口-基本上是RichTextBox的替代品,因为RichTextBox速度非常慢,并且没有有效的替代品-请参见以下问题: 我遇到的问题是,当打印非常大的字符串时,保存字符串的ListBoxItem的高度也会增加,因为它的宽度被限制在窗口内。随着ListBoxItem高度的增加,ListBoxItem本身的滚动行为的有用性迅速降低,并且出现了一些bug。当ListBoxItem的高度接近ListBox的高度时,我会闪烁,ListBox似乎不知道如何呈现该项目

我目前正在使用虚拟化列表框作为文本输出窗口-基本上是RichTextBox的替代品,因为RichTextBox速度非常慢,并且没有有效的替代品-请参见以下问题:

我遇到的问题是,当打印非常大的字符串时,保存字符串的ListBoxItem的高度也会增加,因为它的宽度被限制在窗口内。随着ListBoxItem高度的增加,ListBoxItem本身的滚动行为的有用性迅速降低,并且出现了一些bug。当ListBoxItem的高度接近ListBox的高度时,我会闪烁,ListBox似乎不知道如何呈现该项目-在切换选项卡并返回之前,文本是不可选择的。有时这需要多次尝试。由于虚拟化,滚动条本身的大小发生了巨大的变化——它不知道ListBox的其余项目要小得多,因此在滚动到ListBoxItems小得多的文本部分之前,滚动条会变得太大。总的来说,用户体验下降到了不可接受的程度

所以我的问题是:我如何修复这种行为?有没有办法强制执行截断高度,以便将长字符串拆分为多个ListBoxItem?关闭虚拟化不是一个选项,因为虚拟化使我能够在不减速的情况下向应用程序打印数万行文本


另外,在有人向我指出可能回答这个问题的“重复问题”之前,我已经看过了——这是我能找到的唯一相关问题,但没有回答我的问题(它只是限制了高度、内容的删减,这是不可接受的).

我正在根据文本的大小/长度手动将文本拆分为行。不确定这条路线是否可行。您是否尝试过在ScrollViewer中包装列表框并关闭列表框的内部ScrollViewer ie等?@dellywheel确实是这样,好先生。那是很久以前的事了,所以我对细节不太清楚,但我相信这会造成复制粘贴的主要问题,因为鼠标事件不再正确传播。我已经通过手动将大块文本拆分为单独的ListBoxItems修复了上述所有问题,但代价是无法调整ListBox本身的大小。要使调整大小工作,我必须在每次调整大小事件时重新组合/重新计算文本拆分,这从性能角度来看是不可行的。保持问题的开放性,因为如果不引入问题,我无法完全解决这个问题。