WPF:按下鼠标左键时 PreviewMouseMove 不会触发?

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

我正在为我正在从事的项目编写一个小型拖放功能。我之前曾多次使用过此类功能,并且总是使用 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从不 被解雇。

我完全困惑了,有人能发现我做错了什么吗?只是为了 self 检查,我一直指的是 Jaime Rodriquez 的 Drag & Drop in WPF Explained End to End文章中我显然使用了与他相同的技术,那么可能是什么原因导致的呢?我真的希望这只是我错过的一些愚蠢的事情。有什么想法吗?

最佳答案

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

关于WPF:按下鼠标左键时 PreviewMouseMove 不会触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1834339/

相关文章:

wpf - 使用 MVVM 在 WPF 应用程序中动态设置 UserControl

c# - WPF DependencyObject 调用线程异常

c# - 如何通过 Lambda 或 LINQ 从列表中获取不同的实例

wpf - 为画笔创建 WPF ValueConverter

Jquery Draggable 和 Droppable,删除完整的 div 内容

c# - 在 C# (WPF) 中显示 mysql 的整个表

wpf - contentpresenter.content 上的数据触发不起作用

c# - 可移植类库是否适用于 .net 3.5?

jquery - Selenium IDE 在 DragAndDrop ToObject 时忽略列表的第一个元素

安卓可拖动ImageVIew