Button的MouseDown事件

WPF的Button控件,鼠标点击时,MouseDown事件没有触发。

经确认,Button的MouseDown被内部处理了。下面是基类ButtonBase的部分代码:

Mouse的其它事件也是如此:

官网的说明:

所以,MouseDown、MouseUp、MouseLeftButtonDown、MouseLeftButtonUp、MouseMove、MouseEnter、MouseLeave,Button的这些冒泡事件是内部已经处理的。

注:屏蔽Mouse事件的同时,按钮添加了Click事件和按压状态ButtonBase.IsPressed。

添加Button的MouseDowng事件

如何把Button的MouseDown事件添加回来?官网也给出了指导:

我用第二个方案AddHandler,这么处理的:

1     button.AddHandler(UIElement.MouseUpEvent, new MouseButtonEventHandler(Button_MouseUp), true);
2 button.AddHandler(UIElement.MouseDownEvent, new MouseButtonEventHandler(Button_MouseDown), true);
1     private void Button_MouseDown(object sender, MouseButtonEventArgs e)
2 {
3
4 }
5 private void Button_MouseUp(object sender, MouseButtonEventArgs e)
6 {
7
8 }

要用MouseButtonEventHandler,用MouseEventHandler会提示不匹配异常。对应的EventArgs则用MouseButtonEventArgs

至于原因,应该是,MouseDownEvent事件的注册来源本来就是MouseButton。如下是UIElement鼠标路由对应的Mouse相关附加事件:

1     /// <summary>
2 /// 标识 <see cref="E:System.Windows.Input.Mouse.MouseDown" /> 附加事件。
3 /// </summary>
4 /// <returns>
5 /// <see cref="E:System.Windows.Input.Mouse.MouseDown" /> 附加事件的标识符。
6 /// </returns>
7 public static readonly RoutedEvent MouseDownEvent = EventManager.RegisterRoutedEvent("MouseDown", RoutingStrategy.Bubble, typeof (MouseButtonEventHandler), typeof (Mouse));

WPF Button MouseDown事件的更多相关文章

  1. 【转】【WPF】WPF中的Button的MouseDown事件不触发问题

    按照WPF的帮助说明,某些控件的路由事件被内部处理了,已经被标记为Handled,自行定义的事件处理代码便不再起作用了,有时候会很郁闷! 不过WPF提供了必要的方法. 1)使用相应的Preview事件 ...

  2. WPF开发经验-WPF的TextBox控件的MouseDown事件不响应的解决方法

    一 问题的发现 最近项目有个需求,大概是,当点击某个TextBox时,先执行一些业务上的逻辑处理. 于是按以往思维,将TextBox的MouseDown事件关联事件处理方法,将业务处理写在方法里. 调 ...

  3. WPF的路由事件、冒泡事件、隧道事件(预览事件)

    本文摘要: 1:什么是路由事件: 2:中断事件路由: 3:自定义路由事件: 4:为什么需要自定义路由事件: 5:什么是冒泡事件和预览事件(隧道事件): 1:什么是路由事件 WPF中的事件为路由事件,所 ...

  4. 【WPF】路由事件

    总结WPF中的路由事件,我将学到的内容分为四部分来逐渐掌握 第一部分:wpf中内置的路由事件 以Button的Click事件来说明内置路由事件的使用 XAML代码: <Window x:Clas ...

  5. WPF自定义路由事件(二)

    WPF中的路由事件 as U know,和以前Windows消息事件区别不再多讲,这篇博文中,将首先回顾下WPF内置的路由事件的用法,然后在此基础上自定义一个路由事件. 1.WPF内置路由事件 WPF ...

  6. WPF 冒泡路由事件

    在WPF中,例如,可以构建一个包含图形的按钮,创建一个具有文本和图片混合内容的标签,或者为了实现滚动或折叠的显示效果在一个特定的容器中放置内容.甚至可以多此重复嵌套,直到达到您所希望的层次深度. 这种 ...

  7. WPF中的事件及冒泡事件和隧道事件(预览事件)的区别

    WPF快速指导10:WPF中的事件及冒泡事件和隧道事件(预览事件)的区别   WPF快速指导10:WPF中的事件及冒泡事件和隧道事件(预览事件)的区别 本文摘要: 1:什么是路由事件: 2:中断事件路 ...

  8. WPF - 善用路由事件

    原文:WPF - 善用路由事件 在原来的公司中,编写自定义控件是常常遇到的任务.但这些控件常常拥有一个不怎么好的特点:无论是内部还是外部都没有使用路由事件.那我们应该怎样宰自定义控件开发中使用路由事件 ...

  9. 细说WPF自定义路由事件

    WPF中的路由事件 as U know,和以前Windows消息事件区别不再多讲,这篇博文中,将首先回顾下WPF内置的路由事件的用法,然后在此基础上自定义一个路由事件. 1.WPF内置路由事件   W ...

随机推荐

  1. Linux拷贝以及赋权

    拷贝     cp -r  /源文件/* 目标文件/&     //&后台运行符 改变权限  sudo chown -R 用户:群组  文件名           // sudo ch ...

  2. H. Permutation Counting 判环,计数,拓扑

    H. Permutation Counting 2022/7/28 传送门:https://codeforces.com/group/5zHJ4CTyoU/contest/392060/problem ...

  3. Web服务器2

    Web服务器2 基于华为鲲鹏云服务器CentOS中(或Ubuntu),使用Linux Socket实现: Web服务器的客户端服务器,提交程序运行截图 实现GET即可,请求,响应要符合HTTP协议规范 ...

  4. [Unity基础]碰撞和触发

    参考链接: https://www.cnblogs.com/hont/p/4472326.html 碰撞关系表: https://docs.unity3d.com/Manual/CollidersOv ...

  5. iview 中Modal组件点击确定后验证信息不通过则不关闭弹窗方法

    <Modal v-model="isTemManageShow" title="管理模板" @on-ok="ok" :loading= ...

  6. MySQL count(*) 和 count(字段) 区别

    count(字段)不会取Null的 select count(*) from test01                7条 select count(0) from test01          ...

  7. Eclipse使用Maven搭建SSM框架时遇到的问题以及解决办法

    1.新建项目后出现:Could not caculate build plan:plugin 解决方法:删除本地.m2仓库中 org.apache.maven.plugins:maven-resour ...

  8. JDK1.8中的时间处理API

    相比于JDK1.8之前的SimpleDateFormat以及Calendar等API带来的易误用.线程不安全等问题,JDK1.8提供了LocalDate,LocalTime,LocalDateTime ...

  9. 剑指offer 第 17 天

    第 17 天 排序(中等) 剑指 Offer 40. 最小的k个数 输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3. ...

  10. 解决class path resource [applicationContext.xml] cannot be opened because it does not exist

    在学习spring的过程出现class path resource [applicationContext.xml] cannot be opened because it does not exis ...