我的ListBox
包含两列 - 第一列包含切换按钮,第二列包含Expander
,其中包含多个控件。如果expander
已折叠,则ListBox
的整体滚动效果正常。但是,如果Expander
已打开且展开器包含大量项目,则ListBox
将滚动整个行大小,通常不会显示expander
列表的一部分。
这类似于在列表框中放置一个大于列表框可视区域的图像。在这种情况下,如果单击滚动条,则需要“逐步”向下移动图像,而无需单击一下滚动屏幕。
是否有ListBox
的设置允许部分滚动,如我所述?我的listBox
是在xaml
中定义的,控件是通过C#代码添加的。
答案 0 :(得分:6)
您是否尝试通过将ScrollViewer.CanContentScroll
设置为false来启用平滑滚动?这可以控制ScrollViewer
是一次滚动一个项目,还是平滑地显示部分项目。
“ScrollViewer目前允许两种滚动模式:平滑 逐像素滚动(CanContentScroll = false)或离散 逐项滚动(CanContentScroll = true)。目前WPF 仅在按项目滚动时支持UI虚拟化。基于像素的 滚动也称为“物理滚动”和基于项目的滚动 也称为“逻辑滚动”。“ (来自this answer)。
如果您的ListBox
中有很多项目,这可能不是理想的解决方案,因为它会关闭虚拟化,因此可能会对性能产生影响。查看this answer以了解有关平滑滚动和虚拟化的更多信息。 (一个答案表明允许平滑滚动和虚拟化的黑客攻击)。