相关疑难解决方法(0)

拖动时WPF列表框自动滚动

我有一个WPF应用程序ListBox.拖动机制已经实现,但是当列表太长并且我想将项目移动到不可见的位置时我不能.

例如,屏幕显示10个项目.我有20件物品.如果我想将最后一项拖到第一个位置,我必须拖到顶部并放下.向上滚动并再次拖动.

如何进行ListBox自动滚动?

c# wpf scroll listbox drag

26
推荐指数
2
解决办法
1万
查看次数

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

我已经在这里与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)
Run Code Online (Sandbox Code Playgroud)

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

Dim lvi As ListViewItem = TryCast(GetDependencyObjectFromVisualTree(TryCast(result.VisualHit, DependencyObject), GetType(ListViewItem)), ListViewItem)
Run Code Online (Sandbox Code Playgroud)

哪个是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 …
Run Code Online (Sandbox Code Playgroud)

data-binding collections wpf listview drag-and-drop

7
推荐指数
1
解决办法
6378
查看次数

WPF 拖动滚动无法正常工作

我想在我的应用程序中实现拖动滚动功能,但在路上遇到了问题。有谁能够帮助我?我有一个 ScrollViewer,里面有一个 ItemsControl,在 ItemsTemplate 中我有一个 UserControl。我想将该 UserControl 拖动到 ItemsControl 中。当我拖动到 ItemsControl 的边界时,我希望 ScrollViewer 向下滚动。

protected override void OnPreviewMouseMove(System.Windows.Input.MouseEventArgs e)
{
    if (this.IsMouseCaptured)
    {
        // Get the new mouse position. 
        Point mouseDragCurrentPoint = e.GetPosition(this);

        if (Math.Abs(mouseDragCurrentPoint.Y - this.ActualHeight) <= 50)
        {
            this._scrollStartOffset.Y += 5;
            _containingScrollViewer.ScrollToVerticalOffset(this._scrollStartOffset.Y);
        }
        if (mouseDragCurrentPoint.Y <= 50)
        {
            this._scrollStartOffset.Y -= 5;
            _containingScrollViewer.ScrollToVerticalOffset(this._scrollStartOffset.Y);
        }
    }
    base.OnPreviewMouseMove(e);
}
Run Code Online (Sandbox Code Playgroud)

当我通过调用DragDrop.DoDragDrop()滚动开始拖动时不会发生。但是当我禁用拖动时,ScrollViewer 会根据鼠标位置向下滚动。也许在拖动和捕获鼠标时我没有考虑到一些事情?谢谢关注。加雷金

wpf scroll drag-and-drop itemscontrol

2
推荐指数
1
解决办法
6893
查看次数