您的位置:首页 > 其它

WPF Control event 触发

2014-06-05 09:32 99 查看
今天用WPF想实现一个简单的功能 : 一个Button,默认会有一张图片A, 当鼠标左键Click时换成图片B; 当鼠标按下时,显示图片B; 当鼠标按下拖动,离开control后释放鼠标,此时还原成图片A。

关于WPF中的event, 分 Bubbling and Tunneling event. 请参考:http://msdn.microsoft.com/en-us/library/ms742806(v=vs.110).aspx

由于ButtonBase class中,在 OnMouseLeftButtonDown中,将
MouseLeftButtonDown 标记为Handled,
因此我们注册 PreviewMouseLeftButtonDown event. 请参考 : http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.buttonbase.click(v=vs.110).aspx href="http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.buttonbase.click(v=vs.110).aspx" target=_blank>

所以PreviewMouseLeftButtonDown, PreviewMouseLeftButtonUp, Click 这三个event的触发顺序应该是 PreviewMouseLeftButtonDown --> PreviewMouseLeftButtonUp --> Click. 鼠标左键按下后,拖动,当释放鼠标的点在空间内的话,触发 Click, 否则不会有Click时间。 对于PreviewMouseLeftButtonUp, 当鼠标释放的位置不在空间内的话,默认是不触发的。因为 只有在Capture时,它才触发。所以如果鼠标释放的位置不在控件内,还想触发 PreviewMouseLeftButtonUp,
则 调用 CaptureMouse 方法,让Mouse保持Capture.

private void MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var button = sender as Button;

button.CaptureMouse();

}

private void MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
//...
}


这样 Up event 就会触发了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: