UIElement.OnMouseDown(MouseButtonEventArgs) 方法

定义

当某个未处理的 MouseDown 附加事件在其路由中到达派生自此类的某个元素时调用。 实现此方法可为此事件添加类处理。

protected:
 virtual void OnMouseDown(System::Windows::Input::MouseButtonEventArgs ^ e);
protected virtual void OnMouseDown (System.Windows.Input.MouseButtonEventArgs e);
abstract member OnMouseDown : System.Windows.Input.MouseButtonEventArgs -> unit
override this.OnMouseDown : System.Windows.Input.MouseButtonEventArgs -> unit
Protected Overridable Sub OnMouseDown (e As MouseButtonEventArgs)

参数

e
MouseButtonEventArgs

包含事件数据的 MouseButtonEventArgs。 此事件数据报告有关按下鼠标按钮和已处理状态的详细信息。

注解

鼠标按钮操作也由专用输入管理器处理。 依赖于鼠标按钮操作的其他编程功能(如输入和命令绑定)可能会在操作作为常规鼠标按钮操作公开之前调用该操作的处理程序。 如果这些输入系统功能将 Mouse.MouseDown 事件标记为已处理, OnMouseDown 则不会调用。

如果使用此类处理程序将事件标记为已处理,则可能会影响以下事件: MouseLeftButtonDownMouseRightButtonDown。 收到时 Mouse.MouseDown ,这些事件之一都可以在接收元素上引发。

如果将此事件标记为在类处理中已处理,则仍会引发子事件;但是,它们在事件数据中传递已处理状态。 如果在类处理中处理事件,则不会调用子事件的实例处理程序,除非显式使用 AddHandler(RoutedEvent, Delegate, Boolean)handledEventsTootrue 以附加处理程序。 除非使用 向 签名handledEventsTootrue注册了这些类处理程序,RegisterClassHandler(Type, RoutedEvent, Delegate, Boolean)否则也不会调用类处理程序。 通过处理 OnMouseDown,意味着类处理将考虑所有可能的鼠标按钮按下操作。 此行为可能不需要;因此,使用此虚拟方法将事件标记为已处理时,请谨慎。

每个特定于按钮的直接事件也有一个虚拟 On* 方法;请考虑重写这些特定于按钮的类处理程序是否更合适。

此方法没有默认实现。 由于继承中的中间类可能实现此方法,因此建议在实现中调用基实现。

此方法的用途类似于公共语言运行时 (CLR) 事件模式 On* 方法:此方法提供通过建立类处理程序而不是实例处理程序来处理派生类中的匹配事件的方法。 在这种情况下,匹配事件是路由事件。 On* 方法的实现模式对于路由事件不同,因为路由事件可由子元素引发,子元素不一定是将调用处理程序的元素。 因此,实现需要检查事件数据的源属性。 在大多数情况下,它不应尝试重新触发事件。

通过重写此方法或使用 注册类处理程序 RegisterClassHandler,派生类 UIElement 可以在事件路由中接收事件时调用私有类处理程序方法。 适合类处理的一种方案是操作事件数据并将路由事件标记为已处理。

适用于

另请参阅