我正在写一个小的拖放功能在我正在工作的项目上。我以前做过几次这种类型的功能,我总是使用
PreviewLeftMouseButtonDown
和
PreviewMouseMove
以检测拖动的开始。以前总是这样。
不过,在这个项目中,我发现
预览鼠标移动
当鼠标左键被点击时,即使鼠标在屏幕上明显移动,也不会触发。我已经
从未
以前见过这个,这让我很难过。
这是我使用的XAML:
<Grid Background="{StaticResource BGGradientBrush}"
Margin="1"
PreviewMouseLeftButtonDown="Grid_PreviewMouseLeftButtonDown"
PreviewMouseMove="Grid_PreviewMouseMove">
<!-- snip -->
</Grid>
这是我的代码:
private Point _startDragPoint;
private bool _isDragging;
private void Grid_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
_startDragPoint = e.GetPosition(null);
System.Diagnostics.Trace.WriteLine("Test => (PreviewMouseLeftButtonDown) left click at " + _startDragPoint);
}
private void Grid_PreviewMouseMove(object sender, MouseEventArgs e)
{
System.Diagnostics.Trace.WriteLine("Test => (PreviewMouseMove) enter, e.LeftButton: " + e.LeftButton + ", _isDragging: " + _isDragging);
if (e.LeftButton == MouseButtonState.Pressed && !_isDragging)
{
System.Diagnostics.Trace.WriteLine(
"Test => (PreviewMouseMove) well, the left mouse button is pressed");
var position = e.GetPosition(null);
if (Math.Abs(position.X - _startDragPoint.X) > SystemParameters.MinimumHorizontalDragDistance ||
Math.Abs(position.Y - _startDragPoint.Y) > SystemParameters.MinimumVerticalDragDistance)
{
StartDrag();
}
}
}
private void StartDrag()
{
System.Diagnostics.Trace.WriteLine("Test => (StartDrag) started drag!");
}
我正在通过debugview监视这些跟踪语句,并且在
Grid_PreviewMouseLeftButtonDown
被激发,直到释放鼠标左键,
Grid_PreviewMouseMove
是
从未
解雇。
我完全困惑了,有人能发现我做错了什么吗?我是说杰米·罗德里克斯的
Drag & Drop in WPF Explained End to End
文章和我显然使用了和他相同的技术,那么这可能是什么原因造成的呢?我真的希望这是我所错过的愚蠢的事情。有什么想法吗?