我正在为我正在进行的项目编写一个小拖放功能。我之前已多次完成此类功能,并且我总是使用PreviewLeftMouseButtonDown
和PreviewMouseMove
的组合来检测拖动的开始。它以前总是有效。
在这个项目中,我发现当点击鼠标左键时,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
从不被激活。< / p>
我完全感到困惑,有人能发现我做错的事吗?只是为了理智地检查自己,我一直在提到Jaime Rodriquez的Drag & Drop in WPF Explained End to End文章,我显然使用的是同样的技术,那么可能是什么造成了这个?我真的希望这只是我想念的傻事。有什么想法吗?
答案 0 :(得分:2)
我正在使用Infragistics XamDataGrid来托管需要拖放功能的用户控件。事实证明,当按下鼠标左键时,网格会捕获MouseMove事件。非常恼人。我不确定如何解决它或解决它,但至少我知道现在出了什么问题。