一个WPF控件 诡异的MouseEvent 。

背景:

 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 。

时间: 2024-10-18 07:41:44

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

WPF 控件与布局

[控件到底是什么?] 程序的本质就是"数据+算法"------用户输入原始的数据,算法处理原始数据并得到结果数据.问题就在于程序如何将结果数据显示给用户.同样一组数据,你可以使用LED阵列显示出来,或者以命令行模式借助各种格式控制符(如TAB)对齐并输出,但这些都不如图形界面(GUI  Graphic User Interface)来的友好和方便.GUI的方便在于它对数据展示的直观性,程序员可以通过编程的方式将数据通过图形的方式展示出来,从而避免了用户面对一大堆复杂数据的痛苦.提高了工

WPF 控件之 Popup

1.常用属性说明 IsOpen: 布尔值,指示 Popup 控件是否显示 StaysOpen: 布尔值,指示在 Popup 控件失去焦点的时候,是否关闭 Popup 控件的显示 PopupAnimation:指示显示窗口时是否使用动画,只有在 AllowsTransparency 等于true时此属性才有用 Popup 窗口本身是一个不可见的元素,只有在窗口上放置了信息后才能显示 Popup的定位方式与一般控件的定位方法不一样, Popup 使用五个属性来设定位置信息: PlacementTar

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

今天把写的一个WPF程序发布到别的机器上执行,发现一个比较奇怪的问题:在那个机器上用英文输入法无法输入数字,非要切换到中文输入法才行:但在我的机器上却是好好的. 最开始以为是输入法的问题,弄了好一阵子后,终于找到了原因:虽然这个程序是个WPF程序,但为了复用之前的部分代码,使用着一个WinForm的菜单控件,后续的子窗口都是通过这个WinForm菜单创建的.而用WinForm控件创建的WPF控件可能出现无法正确响应键盘事件的情况. 找到了原因后,一个常规的解决方法是:将WinForm控件换成WP

WPF控件

1:内容控件(Content Controls)2:条目控件(Items Controls)3:文本控件(Text Controls)4:范围控件(Range Controls) 一:内容控件 内容控件的最大的特征就是有一个Content属性,从前面的文章中,我们多多少少也知道Content接收的是一个Object类型,或许我们会立即想到莫非Button就是一个内容控件,确实,Button算是一个内容控件,凡是内容控件都继承自ContentControl,因为Content属性就是属于Conte

WPF控件到图片的转换

在实际的项目开发中,经常需要将信息保存成图片的形式,如屏幕截图.地图快照等操作,我中最近一个项目中便有这样的需求,项目(WPF)中用到GMap.NET控件,中地图上展示一些信息,过程中可能用户需要将地图信息保存下来,也就是地图快照,我的界面如下所示: 网上查了GMap相关的资料,没有找到GMap怎么截图的方法,最后找到网友提供的方法:将WPF控件转换成图片. 具体实现如下: namespace QACDR2.Common { internal enum ImageType { Bmp, Gif,

WPF控件自绘——基础,Control类的定义

用于记录自己的学习WPF控件,大神请飘过... [WPF控件类继承关系图] 所有可以自定义模版的控件都是从Control继承,所以我们来看看Contorl类里面到底有些什么.为以后的控件自定义模版做好准备.废话少说先来看看WPF中Control类的定义 1 namespace System.Windows.Controls 2 { 3 public class Control : FrameworkElement 4 { 5 public static readonly DependencyPr

xamarin-forms (一) 建一个独立控件库,使控件独立出来,让项目分离开来。

大家在写xamarin forms应用的时候,可能需要写一个独立的类库,去封装控件.然后提供给其他的项目中的xaml引用.类似于这种样子 这个myLabel就是我自己封装的一个Label.... 在说这个控件怎么封装之前,先介绍我的一个发现:这种方式不仅仅可以应用于控件的封装,,,,用这种方式可以封装一切 资源,提供给其他项目使用.. 先从封装一个最简单的计算类说起 首先:建一个独立的控件项目,并写一个静态类,类名要个命名空间额最后一个单词一样,里面要有一个静态方法Init 其次:我建一个类,类

WINFORM中加入WPF控件并绑定数据源实现跨线程自动更新

1. WINFORM中添加两个ElementHost,一个放WPF的Button,一个放WPF的TextBox.其中TextBox与数据源绑定,实现跨线程也可以自动更新,而不会出现WINFORM的TextBox控件与数据源绑定后,存在子线程中更新数据源报错(跨线程更新控件)的情况. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System

跟我一起学WPF(3):WPF控件基础

WPF控件简介 通过上一篇XAML语言的介绍,我们知道,XAML是一个树形结构,同样,WPF控件作为构成整个XAML树的一部分,也是一个树形结构.我们看一个简单的例子. <Button.Content> <DockPanel> <Image Source="F:\01.Code\01.MyCode\WpfApplication1\WpfApplication1\Resources\荷.jpg" Width="30"/> <T