如何在滚动时正确调整ListBox的大小?

时间:2014-12-01 21:41:17

标签: c# wpf

我有一个ListBox包含许多项目(在虚拟化面板中)。我使用固定宽度基于其中元素的最大宽度的估计(获得确切的最大值将花费太长时间,因为通常有太多项目。)

但是,如果我的初步估计是错误的,我希望列表框变得更宽,以适应任何更宽的项目,因为它们滚动到视图中。

到目前为止,我能够正确检测列表框何时滚动并测量当前可见的项目。我甚至可以成功地更改列表框的宽度以匹配这些项目中最宽的项目(如果大于当前宽度,那么)。

然而,还有一个错误:如果用户通过按住滚动条滑动并拖动来滚动,那么如果宽度变化太大(超过~100px?),则鼠标光标不再在&#中34;缓冲区"滚动条(已移动)和列表框snaps back to the previous scroll offset(除非用户手动将光标移回移动的滚动条而不释放鼠标按钮)。

所以,我的问题是:有没有办法改变这个滚动转换缓冲区的大小?或者暂时完全禁用它?我甚至无法弄清楚这个滚动功能的官方名称",使相关搜索变得困难。甚至可以在滚动时更改列表框的宽度而不会触发此错误吗?

更新 我找到了constant in the .NET source。它被称为MaxPerpendicularDelta。它似乎没有办法改变它或它的使用方式: - (

另一次更新:好吧,我已经让自己屈服于这样一个事实,即没有真正的方法可以做到这一点。我发现另一个角落情况,用户通过按住滚动条装订线(拇指上方或下方)的光标进行滚动 - 在这种情况下,如果滚动条从光标下方移动,则滚动停止。我只是在鼠标光标停止时简单地避免调整列表框的大小...

0 个答案:

没有答案