您的位置:首页 > 其它

IsMouseOver 和MouseEnter\MouseLeave 事件

2017-02-22 16:16 489 查看
在界面程序中IsMouseOver 属性用来判断鼠标是否在某个界面元素上悬停。

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

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

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

<Window Name="win1">
<StackPanel Name="sp1" Background="Pink" Margin="20,0">
<Button Name="btn1" Content="Click Me" HorizontalAlignment="Center" Padding="10,5"/>
</StackPanel>
</Window>

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





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





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





当将鼠标移出按钮,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/



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息