我正在为正在进行的项目写一个小型拖放功能。我之前已经完成了几次此类功能,我总是将 PreviewLeftMouseButtonDownPreviewMouseMove 检测阻力的开始。它一直在工作。

但是,在这个项目上,我发现 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事件。非常刺激。我不确定如何解决它或解决它,但至少我知道现在出了什么问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top