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.
这样 Up event 就会触发了。
关于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 就会触发了。
相关文章推荐
- Send event to Host (Windows Form) from a WPF Control -Part 1
- Send Custom Event to Host (Windows Form) from a WPF Control -Part 2
- WPF 窗体拖转时不触发MouseLeftButtonUpEvent
- wpf 动态更改ControlTemplate
- WPF 鼠标移动到图片变大,移开还原,单击触发事件效果
- WPF之ControlTemplate
- WPF(ContentControl和ItemsControl)
- WPF MVVM 中TextBox回车触发Command
- 如何触发wpf的TextBox中添加MouseLeftButtonDown事件
- android中MotionEvent.ACTION_CANCEL事件如何被触发?
- WPF--event、delegate、EventHandler、RoutedEventHandler的区别
- WPF的ControlTemplate和DataTemplate简介
- 使用Control.Events 而不是event
- Hosting a Win32 Control in WPF 在wpf中使用win32 控件
- How to use .NET Windows Control into the WPF Application
- ControlTemplate in WPF —— TreeView
- WPF自定义RoutedEvent事件代码段
- event.srcElement就是指向触发事件的元素,他是什么就有什么的属性
- WPF如何自定义TabControl控件样式示例详解
- WPF圆角按钮与触发颜色变化