【问题标题】:WPF: PreviewMouseMove not firing when left mouse button is pressed?WPF:按下鼠标左键时 PreviewMouseMove 不触发?
【发布时间】:2009-12-02 17:04:26
【问题描述】:

我正在为我正在进行的项目编写一个小的拖放功能。我之前已经多次完成这种类型的功能,并且我总是使用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 的 Drag & Drop in WPF Explained End to End 文章,而且我显然使用了与他相同的技术,那么可能是什么原因造成的呢?我真的希望这只是我想念的愚蠢的东西。有什么想法吗?

【问题讨论】:

    标签: wpf .net-3.5 drag-and-drop mouseevent


    【解决方案1】:

    我正在使用 Infragistics XamDataGrid 来托管需要拖放功能的用户控件。事实证明,当按下鼠标左键时,网格会捕获 MouseMove 事件。很烦人。我不确定如何修复它或解决它,但至少我现在知道出了什么问题。

    【讨论】:

      猜你喜欢
      • 2016-11-28
      • 1970-01-01
      • 1970-01-01
      • 2013-04-04
      • 2013-07-23
      • 1970-01-01
      • 2017-11-01
      • 2016-03-15
      • 2011-02-28
      相关资源
      最近更新 更多