IsMouseOver 和MouseEnter\MouseLeave 事件

在界面程序中IsMouseOver 属性用来判断鼠标是否在某个界面元素上悬停。

如果当一个界面元素在逻辑树中被另外一个元素包含,当鼠标同时停在两个元素上的时候,两个元素的IsMouseOver 都是true,无论下面的元素是否被遮住。

IsMouseOver 属性从false变为true的时候会触发UIElementMouseEnter 事件,当IsMouseOver 属性从true变为 false的时候会触发UIElementMouseLeave 事件。

下面的例子中,我们在一个窗口里放一个包含有一个按钮的StackPanel ,并且当IsMouseOver 属性发生改变的时候修改对应的Label的内容。同时注册他们的MouseEnterMouseLeave 事件。


    
        

当鼠标进入窗口的时候,窗口的IsMouseOver 属性变为true,并触发窗口的MouseEnter 事件

IsMouseOver 和MouseEnter\MouseLeave 事件_第1张图片

当鼠标进入到StackPanel的时候,StackPanelIsMouseOver 属性变为true,并触发StackPanelMouseEnter事件。而窗口的IsMouseOver属性依然为true。

IsMouseOver 和MouseEnter\MouseLeave 事件_第2张图片

当鼠标移动到按钮上的时候,按钮的IsMouseOver 属性变为true,并触发MouseEnter事件,而窗口和StackPanelIsMouseOver属性依然为true。

IsMouseOver 和MouseEnter\MouseLeave 事件_第3张图片

当将鼠标移出按钮,StackPanel和窗口的时候,他们的IsMouseOver 属性变为false,并且都触发了MouseLeave 事件。

*****************************************译者注****************************************

IsMouseOver 属性相关的还有IsMouseDirectlyOver 属性。IsMouseDirectlyOver 属性表示鼠标是否直接悬停在控件上方,中间没有控件遮挡。例如上面的例子中,如果鼠标在按钮上方悬停,他们的IsMouseOver 属性都是true,按钮的IsMouseDirectlyOver 属性为true,StackPanel和窗口的IsMouseDirectlyOver 属性为false。

原文地址:https://wpf.2000things.com/2012/10/08/663-how-ismouseover-works-for-nested-elements/




你可能感兴趣的:(WPF)