代码之家  ›  专栏  ›  技术社区  ›  akjoshi HCP

单次和双击事件在画布中不能按预期工作

  •  2
  • akjoshi HCP  · 技术社区  · 14 年前

    我有一个 Canvas 存在于 UserControl ,我已附上 DoubleClick 事件到此 用户控制 这样地

    mainWindow.CanvasLayout.MouseDoubleClick += 
    new MouseButtonEventHandler(CanvasLayout_MouseDoubleClick);
    

    我使用这个事件处理程序来实现全屏功能。

    现在, 帆布 可以在其中放置各种控件。这些控件实现了拖放功能,类似于 this 代码项目文章。

    基本上,我为控件处理这些事件-

    this._dragSource.PreviewMouseLeftButtonDown +=
    new MouseButtonEventHandler(DragSource_PreviewMouseLeftButtonDown);
    
    this._dragSource.PreviewMouseMove += 
    new System.Windows.Input.MouseEventHandler(DragSource_PreviewMouseMove);
    
    this._dragSource.PreviewMouseLeftButtonUp += 
    new MouseButtonEventHandler(DragSource_PreviewMouseLeftButtonUp);
    

    现在,当用户 DoubleClicks 在控件上(存在于 canvas 两者都 双击 (全屏)和单屏 Click 执行(拖放)操作,即如果用户双击控件并快速更改其鼠标位置,则会更改控件位置(将其拖放到新位置)。

    当用户双击控件时,是否有任何方法可以防止拖放操作?

    2 回复  |  直到 6 年前
        1
  •  4
  •   akjoshi HCP    6 年前

    明白了,而不是处理 MouseDoubleClick 事件,我用过 PreviewMouseLeftButtonDown -

    mainWindow.CanvasLayout.PreviewMouseLeftButtonDown 
    += new MouseButtonEventHandler(CanvasLayout_PreviewMouseLeftButtonDown);
    

    void CanvasLayout_PreviewMouseLeftButtonDown(object s, MouseButtonEventArgs e)
    {
        if (e.ClickCount > 1)
        {
            // Do double-click code  
            // Code for FullScreen 
            e.Handled = true;
        }
    }
    
        2
  •  0
  •   akjoshi HCP    12 年前

    你需要做的是,在鼠标启动时启动一个计时器,从中检索时间。 SystemInformation.DoubleClickTime ,并在计时器上执行单击操作(显然,只有当您在平均时间内没有检测到双击时)。

    同样使用 SystemInformation.DragSize 以防止意外拖放。

    注意, SystemInformation 类是WinForms的一部分,因此需要添加对 System.Windows.Forms 这个类在WPF应用程序中可以正常工作。