当前位置:  开发笔记 > 编程语言 > 正文

WPF ListView数据绑定拖放自动滚动

如何解决《WPFListView数据绑定拖放自动滚动》经验,为你挑选了0个好方法。

我已经在这里与Bea的解决方案合作了一段时间,并发现它非常有用.现在我遇到的问题是,当我将项目拖放到另一个ListView控件中时,我想在拖动期间向上/向下滚动(将项目从索引30移动到索引1),它不会发生.我必须拖动到ListView中的可视项目的顶部,手动向上滚动,然后再次拖动,最终在我想要的位置结束.这不是非常用户友好.

现在我找到了我想要测试哪个项目被拖过的函数(DragDropHelper.DropTarget_PreviewDragOver),我就是这样.

Dim pt As Point = e.GetPosition(DirectCast(Me.targetItemsControl, UIElement))

' Perform the hit test against a given portion of the visual object tree.
Dim result As HitTestResult = VisualTreeHelper.HitTest(Me.targetItemsControl, pt)

现在从那里我可以得到这个视觉命中的DependencyProperty

Dim lvi As ListViewItem = TryCast(GetDependencyObjectFromVisualTree(TryCast(result.VisualHit, DependencyObject), GetType(ListViewItem)), ListViewItem)

哪个是ListViewItem.现在在函数DropTarget_PreviewDragOver中我有"DraggedItem",它在Bea的示例中是Picture类型,但是这可以根据你绑定到ListView的ObservableCollection而改变.现在,我想根据鼠标在控件上的位置向上或向下拖动ListView.我尝试使用下面未完成的非工作代码

If lvi IsNot Nothing Then
    If pt.Y <= 25 Then
        Dim lv As ListView = TryCast(targetItemsControl, ListView)
        If lv IsNot Nothing Then
            Dim index As Integer = lv.Items.IndexOf(lvi)
            If index > 1 Then
                lv.ScrollIntoView(lv.Items(index - 1))
            End If
        End If
    Else
        If pt.Y >= Me.targetItemsControl.ActualHeight - 25 Then
            Debug.Print("Scroll Down")
        End If
    End If
End If

有人能指出我正确的方向,以便在拖动项目时滚动这个ItemsControl或ListView吗?

谢谢!

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有