【发布时间】:2009-12-02 17:04:26
【问题描述】:
我正在为我正在进行的项目编写一个小的拖放功能。我之前已经多次完成这种类型的功能,并且我总是使用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从未被触发。
我完全困惑了,谁能发现我做错了什么?只是为了检查自己的理智,我一直在参考 Jaime Rodriquez 的 Drag & Drop in WPF Explained End to End 文章,而且我显然使用了与他相同的技术,那么可能是什么原因造成的呢?我真的希望这只是我想念的愚蠢的东西。有什么想法吗?
【问题讨论】:
标签: wpf .net-3.5 drag-and-drop mouseevent