我对某些鼠标事件有些怀疑。我正在谈论的是Mouse_Click事件,PreviewMouse_Down事件和MouseDown事件。我已经在MSDN中阅读了有关这些事件的解释,但我很难区分这些事件。
到目前为止我所知道的:
Click : Occurs when the control is clicked by the mouse.
Preview: Occurs when any mouse button is pressed while the pointer is over this element.
Mousedown: Occurs when the mouse pointer is over the control and a mouse button is pressed.
例如,我不知道哪个事件适合哪个。根据解释,它们对我来说几乎是一样的。最重要的是,当按下鼠标左键时出现PreviewMouseDown .Aren他们都一样吗?任何人都可以对此有所了解吗?
答案 0 :(得分:3)
Aren他们都一样吗?
简短回答是"它们各不相同,但根据用例,它们可能起到同样的作用。"
任何人都可以对此有所了解吗?
那他们有什么不同?
首先,让我们看一下定义事件的基类。
MouseDown
和PreviewMouseDown
来自System.Windows.UIElement
Click
来自System.Windows.Controls.Primitives.ButtonBase
。
UIElement
是一个比ButtonBase
更高的抽象,这意味着更多的类派生自它。换句话说,更多的课程将包含MouseDown
和PreviewMouseDown
个活动,但不包含Click
个活动
另请注意,ButtonBase
本身来自UIElement
,因此ButtonBase
也有MouseDown
和PreviewMouseDown
个事件。
但正如ButtonBase.Click
的文件中所述:
ButtonBase
标记MouseLeftButtonDown
方法中处理的OnMouseLeftButtonDown
事件,并引发Click事件。因此,对于继承自OnMouseLeftButtonDown
的控件,ButtonBase
事件永远不会发生。
这将我们带到第二点,ButtonBase
如何/何时触发事件?
请注意,以下说明仅考虑三个事件(PreviewMouseDown
,MouseDown
和Click
)。在上述三个事件之前/之间/之后可能涉及其他事件,但出于讨论目的而被忽视。
PreviewMouseDown
将始终是第一个触发。
MouseDown
会出现。
Click
当且仅当鼠标左键也在ButtonBase
要添加,当ButtonBase
处于焦点并且用户按下ENTER或空格键时,Click
将会触发PreviewMouseDown
有关MouseDown
和PreviewMouseDown
事件(基本上是XXX事件和PreviewXXX事件)之间差异的全新讨论。您可能需要阅读Routed Events的文档,以便了解该主题。
答案 1 :(得分:0)
据我所知,它与Event Tunneling和Bubbling有关。
有一系列事件。
我们假设您有一个按钮。 如果您左键单击该按钮,则会依次在事件下方。
1)向下预览鼠标左键
2)预览鼠标
3)鼠标左键按下
4)鼠标按下
5)向上预览鼠标左键
6)预览鼠标
7)鼠标左键向上
8)鼠标向上
有关详细信息,请参阅事件隧道和冒泡。 http://csharphelper.com/blog/2015/03/understand-event-bubbling-and-tunneling-in-wpf-and-c/