C# 在添加项目时冻结listboxitem
我们有一个列表框,其中包含许多项。项目通过ObservableCollection插入列表框。其中一些项目可以直接在列表框中编辑。但是,如果在索引<已编辑项目的索引处添加项目,则列表框的整个内容将下移 我们想做的是:如果一个项目处于编辑模式,我们想冻结它在屏幕上的位置。如果将项目添加到集合中,并且项目周围的UI发生更改,则没有问题。但是项目在屏幕上的位置应该保持不变 到目前为止,我唯一能做的就是附加到ScrollChanged事件,最多使用BringIntoView或ScrollIntoView方法来确保该项始终显示在UI中的某个位置,但我无法锁定其位置C# 在添加项目时冻结listboxitem,c#,wpf,C#,Wpf,我们有一个列表框,其中包含许多项。项目通过ObservableCollection插入列表框。其中一些项目可以直接在列表框中编辑。但是,如果在索引
有人做过类似的事情并提供帮助吗?您可以强制将物品添加到收藏的末尾。否则,我认为滚动ScrollViewer是正确的。进入“编辑模式”时,跟踪当前水平偏移
ScrollViewer sv = listBox.GetScrollViewer();
double indexPos = sv.HorizontalOffset;
但是,我认为您最好附加到ObservaleCollection.CollectionChanged事件。当事件激发时,检查新值是否插入到“编辑模式”项上方。如果是,则运行以下代码
ScrollViewer sv = listBox.GetScrollViewer();
sv.ScrollToHorizontalOffset(indexPos+1); // This will obviously require an offset
问题是你根本不想让它移动吗?或者,当您应用更改时(例如,将更改应用于当前位于上一个索引的项目),您通过索引号引用了所述项目,并且索引中的更改是否会导致其他问题
如果问题是索引的更改导致代码出现问题,那么我将停止使用索引,而是获取对对象的引用。以后,如果您发现需要,您可以随时获取项目的索引。我认为以下方法可以解决您的问题:
希望这对您有所帮助。如果冻结列表框的其余部分是一个可行的选择,那么切换到ListView并使用EnsureRevible是否可行?。这样,添加的项目直到编辑完成或转义后才会显示,然后您可以尝试使用
BeginUpdate
和EndUpdate
停止重新绘制列表框。不过,我不确定这会对您的编辑过程产生什么影响。非常有趣。我明天会试试这个,然后汇报它是如何工作的。谢谢。我不想将此作为回答,但如果必须这样做(如果您使用数据绑定),我会尝试的第一件事是在编辑项目时中断数据绑定,并在编辑完成后再次设置数据上下文。