WPF:按下左鼠标按钮时未触发的previewmousemove?
-
11-09-2019 - |
题
我正在为正在进行的项目写一个小型拖放功能。我之前已经完成了几次此类功能,我总是将 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的 拖动WPF端到端解释 文章,我显然使用了他与他相同的技术,那么可能会导致这一点呢?我真的希望这只是我缺少的愚蠢的东西。有任何想法吗?
解决方案
我正在使用Infragistics Xamdatagrid来托管需要拖放功能的用户控件。事实证明,当按下左鼠标按钮时,网格捕获了Mousemove事件。非常刺激。我不确定如何解决它或解决它,但至少我知道现在出了什么问题。
不隶属于 StackOverflow