如何在拖放时更改`ListViewItem`的外观

发布时间:2020-07-07 14:09

我有一个ListView,通过拖放成功实现了列表中项目的重新排列。如果用户将项目向上移动,它将插入到ListViewItem上方,如果用户向下移动,项目将插入插入到ListViewItem下方,{p}

但是,我想为用户提供视觉反馈,以了解是否将商品插入到ListViewItem下方或上方,他将继续放置该商品。我要实现的是,根据其拖放行为,被拖动到的listviewitem将在其下方或上方显示额外的空白。我似乎无法做到这一点。

使用边距,我可以在鼠标下更改listviewitem的位置,但是用户随后将直观地将拖动的项目移动到此空白区域,从而离开listviewitem。我试图通过增加listviewitem的padding,height,vertical(content)alignment使它起作用,请命名。但是什么都行不通!

怎么办?

代码:

Private Sub ListViewItem_DragEnter(sender As Object, e As DragEventArgs)
        If e.Data.GetDataPresent(moveWorkflowStep) = False Then Return

        Dim currentListviewItem As ListViewItem = sender
        _currentListviewItemMargin = currentListviewItem.Margin


        Dim sourceListviewItem As ListViewItem = e.Data.GetData(moveWorkflowStep)
        Dim sourceRank = CType(sourceListviewItem.DataContext, ObservableWorkflowStep).Rank
        Dim currentRank = CType(currentListviewItem.DataContext, ObservableWorkflowStep).Rank

        If currentRank > sourceRank Then
            currentListviewItem.VerticalAlignment = VerticalAlignment.Top
            'currentListviewItem.Margin = New Thickness(_currentListviewItemMargin.Left,
            '                                           _currentListviewItemMargin.Top,
            '                                           _currentListviewItemMargin.Right,
            '                                           20)

        ElseIf currentRank < sourceRank Then
            currentListviewItem.VerticalAlignment = VerticalAlignment.Bottom
            'currentListviewItem.Margin = New Thickness(_currentListviewItemMargin.Left,
            '                                           20,
            '                                           _currentListviewItemMargin.Right,
            '                                           _currentListviewItemMargin.Bottom)

        End If
    End Sub
回答1