c# - 了解MouseEvent

时间:2017-12-15 02:48:46

标签: c# wpf visual-studio

我对某些鼠标事件有些怀疑。我正在谈论的是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他们都一样吗?任何人都可以对此有所了解吗?

2 个答案:

答案 0 :(得分:3)

  

Aren他们都一样吗?

简短回答是"它们各不相同,但根据用例,它们可能起到同样的作用。"

  

任何人都可以对此有所了解吗?

那他们有什么不同?

首先,让我们看一下定义事件的基类。

MouseDownPreviewMouseDown来自System.Windows.UIElement
Click来自System.Windows.Controls.Primitives.ButtonBase

UIElement是一个比ButtonBase更高的抽象,这意味着更多的类派生自它。换句话说,更多的课程将包含MouseDownPreviewMouseDown个活动,但不包含Click个活动

另请注意,ButtonBase本身来自UIElement,因此ButtonBase也有MouseDownPreviewMouseDown个事件。

但正如ButtonBase.Click的文件中所述:

  

ButtonBase标记MouseLeftButtonDown方法中处理的OnMouseLeftButtonDown事件,并引发Click事件。因此,对于继承自OnMouseLeftButtonDown的控件,ButtonBase事件永远不会发生。

这将我们带到第二点,ButtonBase如何/何时触发事件?

请注意,以下说明仅考虑三个事件(PreviewMouseDownMouseDownClick)。在上述三个事件之前/之间/之后可能涉及其他事件,但出于讨论目的而被忽视。

只要按下任何鼠标按钮(向左或向右),

PreviewMouseDown将始终是第一个触发。

使用右键单击时,

MouseDown会出现。

使用左键单击时会发生

Click当且仅当鼠标左键也在ButtonBase

上释放时

要添加,当ButtonBase处于焦点并且用户按下ENTER或空格键时,Click将会触发PreviewMouseDown

有关MouseDownPreviewMouseDown事件(基本上是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/