代码之家  ›  专栏  ›  技术社区  ›  Rob

wpf:previewmousemove在按下鼠标左键时不启动?

  •  2
  • Rob  · 技术社区  · 15 年前

    我正在写一个小的拖放功能在我正在工作的项目上。我以前做过几次这种类型的功能,我总是使用 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 文章和我显然使用了和他相同的技术,那么这可能是什么原因造成的呢?我真的希望这是我所错过的愚蠢的事情。有什么想法吗?

    1 回复  |  直到 13 年前
        1
  •  2
  •   Rob    15 年前

    我正在使用基础架构XamDataGrid托管需要拖放功能的用户控件。结果显示,当按下鼠标左键时,网格会捕捉鼠标移动事件。挺刺激的。我不知道该如何修复它或解决它,但至少我知道现在出了什么问题。