WPF 列表视图滚动在拖放方案中无法正常工作
本文关键字:常工作 工作 视图 列表 滚动 方案 拖放 WPF | 更新日期: 2023-09-27 18:30:53
我有以下 Xaml 代码
<ListView x:Name="ListView" ItemsSource="{Binding Values}" MaxHeight="400" MaxWidth="500" MinWidth="160"
VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.VirtualizationMode="Recycling" ScrollViewer.IsDeferredScrollingEnabled="True"
MouseMove="ListView_MouseMove">
<ListView.View>
<GridView x:Name="GridView" ColumnHeaderContainerStyle="{StaticResource HeaderStyle}">
<!--<GridViewColumn Header="ID" DisplayMemberBinding="{Binding [0]}" CellTemplate="{StaticResource ColumnCellTemplate}" />
<GridViewColumn Header="Test" DisplayMemberBinding="{Binding [1]}" CellTemplate="{StaticResource ColumnCellTemplate}"/>-->
</GridView>
</ListView.View>
</ListView>
以及我的问题背后的相关代码如下
Private Sub ListView_MouseMove(sender As Object, e As MouseEventArgs)
MyBase.OnMouseMove(e)
Dim viewModel As QuestionAnswerViewModel = CType(DataContext, QuestionAnswerViewModel)
'Dim vis As Visual = e.OriginalSource()
If e.LeftButton = MouseButtonState.Pressed And viewModel IsNot Nothing AndAlso viewModel.Value IsNot Nothing Then
Dim data As New DataObject
data.SetData(DataFormats.StringFormat, viewModel.Value)
'Inititate the drag-and-drop operation.
DragDrop.DoDragDrop(Me, data, DragDropEffects.Copy Or DragDropEffects.Move)
End If
End Sub
现在我的代码的问题是,当我滚动时,MouseMove 事件被触发,然后,当然是拖放方法。我想问一下如何正确使用 e.OriginalSource()
方法以查看用户是否在拖动滚动条。
谢谢
为了使滚动正常工作,我刚刚在 If
语句中添加了一个新检查Not e.OriginalSource().GetType().Equals(GetType(Thumb))
完整的代码现在看起来像这样
Private Sub ListView_MouseMove(sender As Object, e As MouseEventArgs)
MyBase.OnMouseMove(e)
Dim viewModel As QuestionAnswerViewModel = CType(DataContext, QuestionAnswerViewModel)
If e.LeftButton = MouseButtonState.Pressed And viewModel IsNot Nothing AndAlso viewModel.Value IsNot Nothing _
AndAlso Not e.OriginalSource().GetType().Equals(GetType(Thumb)) Then
Dim data As New DataObject
data.SetData(DataFormats.StringFormat, viewModel.Value)
DragDrop.DoDragDrop(Me, data, DragDropEffects.Copy Or DragDropEffects.Move)
End If
End Sub
现在,每当我拖动滚动条时,代码都不会进入If
语句,因此滚动条将正常工作。