zoukankan      html  css  js  c++  java
  • 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));
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    剑指Offer——斐波那契数列
    剑指Offer——旋转数组的最小数字
    剑指Offer——用两个栈实现队列
    剑指Offer——重建二叉树
    剑指Offer——从尾到头打印链表
    剑指Offer——替换空格
    Leetcode 153. Find Minimum in Rotated Sorted Array -- 二分查找的变种
    头条笔试后端开发
    渣浪电话面
    Leetcode 中Linked List Cycle 一类问题
  • 原文地址:https://www.cnblogs.com/kybs0/p/14920784.html
Copyright © 2011-2022 走看看