WPF Button MouseDown事件
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事件的更多相关文章
- 【转】【WPF】WPF中的Button的MouseDown事件不触发问题
按照WPF的帮助说明,某些控件的路由事件被内部处理了,已经被标记为Handled,自行定义的事件处理代码便不再起作用了,有时候会很郁闷! 不过WPF提供了必要的方法. 1)使用相应的Preview事件 ...
- WPF开发经验-WPF的TextBox控件的MouseDown事件不响应的解决方法
一 问题的发现 最近项目有个需求,大概是,当点击某个TextBox时,先执行一些业务上的逻辑处理. 于是按以往思维,将TextBox的MouseDown事件关联事件处理方法,将业务处理写在方法里. 调 ...
- WPF的路由事件、冒泡事件、隧道事件(预览事件)
本文摘要: 1:什么是路由事件: 2:中断事件路由: 3:自定义路由事件: 4:为什么需要自定义路由事件: 5:什么是冒泡事件和预览事件(隧道事件): 1:什么是路由事件 WPF中的事件为路由事件,所 ...
- 【WPF】路由事件
总结WPF中的路由事件,我将学到的内容分为四部分来逐渐掌握 第一部分:wpf中内置的路由事件 以Button的Click事件来说明内置路由事件的使用 XAML代码: <Window x:Clas ...
- WPF自定义路由事件(二)
WPF中的路由事件 as U know,和以前Windows消息事件区别不再多讲,这篇博文中,将首先回顾下WPF内置的路由事件的用法,然后在此基础上自定义一个路由事件. 1.WPF内置路由事件 WPF ...
- WPF 冒泡路由事件
在WPF中,例如,可以构建一个包含图形的按钮,创建一个具有文本和图片混合内容的标签,或者为了实现滚动或折叠的显示效果在一个特定的容器中放置内容.甚至可以多此重复嵌套,直到达到您所希望的层次深度. 这种 ...
- WPF中的事件及冒泡事件和隧道事件(预览事件)的区别
WPF快速指导10:WPF中的事件及冒泡事件和隧道事件(预览事件)的区别 WPF快速指导10:WPF中的事件及冒泡事件和隧道事件(预览事件)的区别 本文摘要: 1:什么是路由事件: 2:中断事件路 ...
- WPF - 善用路由事件
原文:WPF - 善用路由事件 在原来的公司中,编写自定义控件是常常遇到的任务.但这些控件常常拥有一个不怎么好的特点:无论是内部还是外部都没有使用路由事件.那我们应该怎样宰自定义控件开发中使用路由事件 ...
- 细说WPF自定义路由事件
WPF中的路由事件 as U know,和以前Windows消息事件区别不再多讲,这篇博文中,将首先回顾下WPF内置的路由事件的用法,然后在此基础上自定义一个路由事件. 1.WPF内置路由事件 W ...
随机推荐
- 油猴CSDN净化脚本
CSDN版面越来越乱,最近还总是弹出红包雨和顶部巨大横幅,左侧也会随机出现学生认证弹窗.而且版面混乱难看,看起来非常费劲. 另外底下的推荐列表经常夹杂着CSDN文件下载的链接,下载文件又要付费,从来不 ...
- awk sub string
cat TFY1C.txt|awk '{print $0"\t"substr($4,1,4)}'> TFY1CRID.tx 1--从那位开始 4--多长
- SAP B1 增加或删除单据,或者是新增修改BOM清单,报错‘出现内部错误时’,一般是控制过程 SBO_SP_TransactionNotification 里面的代码有问题,执行不下去了,因此一行行检查SQL代码,一般就能发现错误所在。
SAP B1 增加或删除单据,或者是新增修改BOM清单,报错'出现内部错误时',一般是控制过程 SBO_SP_TransactionNotification 里面的代码有问题,执行不下去了,因此一行行 ...
- springboot中redis使用和工具
application.properties #Redis相关配置 spring.data.redis.host=localhost #端口 spring.data.redis.port=6379 # ...
- 什么是Placement new ?
1. 什么是placementNew placement new的作用就是:创建对象(调用该类的构造函数)但是不分配内存,而是在已有的内存块上面创建对象.用于需要反复创建并删除的对象上,可以降低分配释 ...
- 《MySQL是怎样运行的》第八章小结
- ASP.NET Core - 配置系统之自定义配置提供程序
4. 自定义配置提供程序 在 .NET Core 配置系统中封装一个配置提供程序关键在于提供相应的 IconfigurationSource 实现和 IConfigurationProvider 接口 ...
- JavaWeb学习笔记第二弹
(续集)DQL:查询操作 1.排序查询 排序方式:(仅有一个排序参照时) 1.升序:ASC(默认) 命令:**select * from 表名 order by 列名 (asc);** 2.降序:DE ...
- 自己动手从零写桌面操作系统GrapeOS系列教程——15.用汇编向屏幕输出字符
学习操作系统原理最好的方法是自己写一个简单的操作系统. 在上一讲中我们介绍了屏幕显示的原理,本讲我们来实战一下. 一.向屏幕输出一个字符mbr4.asm mbr4.asm中的代码如下: ;将屏幕第一行 ...
- Insecure Randomness 不安全的随机数
Insecure Randomness Abstract 标准的伪随机数生成器不能抵挡各种加密攻击. Explanation 在对安全性要求较高的环境中,使用一个能产生可预测数值的函数作为随机数据源, ...