我们有一个列表框,其中包含许多项。将项目通过ObservableCollection插入到ListBox中。其中一些项目可以在列表框中直接进行编辑。但是,如果在索引
我们想要做的是以下操作:如果一个项目处于编辑模式,我们想卡住它在屏幕上的位置。如果将项目添加到集合中并且项目周围的UI发生变化,则很好。但是项目的位置应该在屏幕上保持不变。

到目前为止,我唯一能做的就是附加到ScrollChanged事件,并且最多只能使用BringIntoView或ScrollIntoView方法来确保该项目始终显示在UI中,但是我无法锁定它位置。

有没有人做过这样的事情并提供帮助?

最佳答案

我认为以下方法可以解决您的问题:

  • 进入编辑模式时,请保留对要编辑的对象,其在列表框中的索引以及ScrollViewer的Horizo​​ntalOffset的引用。
  • 在ObservableCollection.CollectionChanged事件的处理程序中,找到您正在编辑的对象的新索引,如果索引已更改,则将已替换的项目替换为现在的位置(或其他逻辑,如果您想保持一定顺序,则将其交换)。 。然后,如果ScrollViewer.Horizo​​ntalOffset更改,请将其移回所述偏移量。

  • 这样可以确保您要编辑的项目始终位于列表和用户界面中的完全相同的位置。

    希望这对您有所帮助。

    关于c# - 在添加项目时卡住listboxitem,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2428920/

    10-17 01:04