我们有一个ListBox有一些项目.项目通过ObservableCollection插入列表框中.其中一些项目可以在ListBox中进行编辑.然而,如果在索引<编辑的项目的索引,ListBox的整个内容向下移动. 我们想要做的是:如果一个项目处于编辑模式,我们希望冻结其在屏幕上的位置.如果将项目添加到集合中,并且项目周围的UI会发生更改,则会很好.但是项目的位置在屏幕上应保持不变. 到目前为止我唯一可以做的事情就是附加到ScrollChanged事件,最多使用BringIntoView或ScrollIntoView方法来确保该项目始终显示在UI的某个位置,但是我无法锁定它位置. 有人做过这样的事吗?
解决方法
我认为以下将解决您的问题:
>进入编辑模式时,请保留对要编辑对象的引用,列表框中的索引和ScrollViewer的HorizontalOffset.
>在ObservableCollection.CollectionChanged事件的处理程序中,找到您编辑的对象的新索引,如果索引已更改,请将已编辑的项目与现在将其替换的项目进行交换(或者如果要保留某个顺序的其他逻辑) .然后,如果ScrollViewer.HorizontalOffset更改,将其移回到所述偏移量.
这将确保您正在编辑的项目将始终保持在列表和UI中完全相同的位置.
希望这能帮助你.