背景:

 private System.Windows.Controls.Border _borderTouch;
private bool _mouseDown = false;

   private System.Windows.Point _currentPoint = new System.Windows.Point(0, 0);
    private System.Windows.Point _lastPoint = new System.Windows.Point(0, 0);

一个wpf Border控件,然后注册鼠标事件

 touch.MouseLeftButtonDown += new MouseButtonEventHandler(touch_MouseLeftButtonDown);
touch.MouseLeftButtonUp += new MouseButtonEventHandler(touch_MouseLeftButtonUp);
touch.MouseLeave += new MouseEventHandler(touch_MouseLeave);
touch.MouseMove += new MouseEventHandler(touch_MouseMove);
    private void touch_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
//if (this._mouseDown)
//{
this._mouseDown = false;
//}
}
private void touch_MouseLeave(object sender, MouseEventArgs e)
{
//if (this._mouseDown)
//{
this._mouseDown = false;
//}
}
private void touch_MouseMove(object sender, MouseEventArgs e)
{
if (this._mouseDown)
{
_currentPoint = e.GetPosition(this._borderTouch);
//if (_currentPoint == _lastPoint) return;
//_lastPoint = _currentPoint;
}
}
private void touch_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (!this._mouseDown)
{
this._mouseDown = true;
_currentPoint = e.GetPosition(this._borderTouch);
//_lastPoint = _currentPoint;
}
}

操作过程:

1. 点鼠标左键触发touch_MouseLeftButtonDown一次,

2. 然后移动鼠标触发touch_MouseMove(注明:如果鼠标在某点不动,相同坐标只触发一次,然后事件不再触发,如果再移动接触发),

3. 鼠标离开(或者左键松开)触发touch_MouseLeave(touch_MouseLeftButtonUp)一次。

问题:

1. 在我的电脑上对应以上操作过程包括触发事件的次数。

我的电脑配置:

2. 但是在第二个电脑上就不一样,

第2个过程鼠标不动的时候会触发10多次然后就不触发啦(也就是说相同的坐标会触发10多次touch_MouseMove然后不再触发)

第3个过程也是触发10多次,然后停止触发。

第二个电脑配置:

解决:

我想要的当然是我电脑上的正常操作过程,为同步另一台电脑。

我改啦下代码,但是我不知道为什么会有这样的差异。

1. touch_MouseMove   添加判断上一次的坐标和现在的坐标是否相同,如果相同就return
     if (_currentPoint == _lastPoint) return;
_lastPoint = _currentPoint;
2. touch_MouseLeftButtonUp/touch_MouseLeave 添加判断
 if (this._mouseDown)
{
this._mouseDown = false;
}

一个WPF控件 诡异的MouseEvent 。的更多相关文章

  1. 使用 WebView2 封装一个生成 PDF 的 WPF 控件

    使用 WebView2 封装一个生成 PDF 的 WPF 控件 最近在迁移项目到 .net6,发现项目中用的 PDF 库不支持 .net6,于是想着换一个库.结果找了一大圈,发现不是版本不支持,就是收 ...

  2. 在WinForm应用程序中嵌入WPF控件

    我们知道,在WPF界面上添加WinForm的控件需要使用WindowsFormHost类.而在WinForm界面上添加WPF控件该如何做呢?有没有类似的类呢?明显是有的,ElementHost就是为了 ...

  3. WPF 控件总结

    内容控件:1.Button:当Button.IsCancel="True"时,点击按钮,对话框关闭.当Button.IsDefault="True",按回车触发 ...

  4. 浅尝辄止——使用ActiveX装载WPF控件

    1 引言 使用VC编写的容器类编辑器,很多都可以挂接ActiveX控件,因为基于COM的ActiveX控件不仅封装性不错,还可以显示一些不错的界面图元. 但是随着技术不断的进步,已被抛弃的Active ...

  5. WPF控件

    1:内容控件(Content Controls)2:条目控件(Items Controls)3:文本控件(Text Controls)4:范围控件(Range Controls) 一:内容控件 内容控 ...

  6. 通过WinForm控件创建的WPF控件无法输入的问题

    今天把写的一个WPF程序发布到别的机器上执行,发现一个比较奇怪的问题:在那个机器上用英文输入法无法输入数字,非要切换到中文输入法才行:但在我的机器上却是好好的. 最开始以为是输入法的问题,弄了好一阵子 ...

  7. WPF控件模板

    引言:在进行WPF项目开发过程中,由于项目的需要,经常要对某个控件进行特殊的设定,其中就牵涉到模板的相关方面的内容.本文也是在自己进行项目开发过程中遇到控件模板设定时集中搜集资料后整理出来的,以供在以 ...

  8. 关于WinForm引用WPF窗体---在Winform窗体中使用WPF控件

    项目中有个界面展示用WPF实现起来比较简单,并且能提供更酷炫的效果,但是在WinForm中使用WPF窗体出现了问题,在网上找了一下有些人说Winform不能引用WPF的窗体,我就很纳闷,Win32都能 ...

  9. winfrom窗体中嵌套WPF控件

    前言 本文主要介绍如何在winfrom窗体中嵌套WPF控件, 一来是自己记录一下,而来希望能对有需要的朋友提供实现思路. 如有错误请指出...下面进入正题... -1.前期准备 准备一个建立好的win ...

随机推荐

  1. 让 Generator 自启动

    文章同步自个人博客:http://www.52cik.com/2016/07/11/generator-co.html 此前只是简单使用而没有真正的去研究 Generator,这次要好好折腾下这货. ...

  2. JQuery功能查询页

    JQuery在前端开发中已经是常用的不能再常用的库了.最近的项目中使用到了JQuery,我第一次接触它的时候为了学习,把常用的操作指令用比较小的字体写在一页word上,打印出来贴在桌子上,用来让自己时 ...

  3. 自己存档:table 的css

    border:0;margin:0;border-collapse:collapse;border-spacing:0;

  4. Mecanim动画系统 制作流程

  5. SDN组网相关解决方案

    http://www.muzixing.com/pages/2016/02/14/sdnzu-wang-xiang-guan-jie-jue-fang-an.html 2016-02-14 by mu ...

  6. [团队项目]Github生成燃尽图的方式

    经过一晚上折腾,终于算是把linux上成功生成了我们团队项目的燃尽图,效果还是不错,在过程中又发现了另一种生成燃尽图的方式,也是基于一个开源项目. 1.准备: 首先你的项目一定要有milestone. ...

  7. js浏览器窗口

    一.clientwidth和clientheight 注:返回了元素大小,但没有单位,默认单位是 px,如果你强行设置了单位,比如 100em之类,它还是会返回 px的大小. (CSS获取的话,是照着 ...

  8. jQuery能做些什么

    来源于: Learning jQuery, 4th Edition What jQuery does: 1. Access elements in a document; $('div.content ...

  9. virtio 半虚拟化驱动

    半虚拟化驱动 5.1.1 virtio概述 KVM是必须使用硬件虚拟化辅助技术(如Intel VT-x.AMD-V)的hypervisor,在CPU运行效率方面有硬件支持,其效率是比较高的:在有Int ...

  10. C#.NET里面抽象类和接口有什么区别?

    声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况.不能创建abstract 类的实例.然 ...