在silverlight2中,事件的处理发生了些变化,类似button,togglebutton等控件的MouseLeftButtonDown,MouseLeftButtonUp等事件已经在类的级别设置为已处理,因此这些类的实例不会再响应这两个事件,当然我们有时候依然要用到这两个事件,解决的方法也很简单。我们需要重载这些类的OnMouseLeftButtonDown和OnMouseLeftButtonUp方法来设置已处理的标志为未处理就可以了。
- public class ActivityControl : Button
- {
- private bool _isMouseDown = false;
- private Point _oldPoint;
- public ActivityType ActivityType { get; set; }
- public ActivityControl()
- {
- this.MouseLeftButtonDown += new MouseButtonEventHandler(ActivityControl_MouseLeftButtonDown);
- this.MouseLeftButtonUp += new MouseButtonEventHandler(ActivityControl_MouseLeftButtonUp);
- this.MouseMove += new MouseEventHandler(ActivityControl_MouseMove);
- }
- protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
- {
- base.OnMouseLeftButtonDown(e);
- e.Handled = false;
- }
- protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
- {
- base.OnMouseLeftButtonUp(e);
- e.Handled = false;
- }
- void ActivityControl_MouseMove(object sender, MouseEventArgs e)
- {
- if (_isMouseDown)
- {
- Point p = e.GetPosition(null);
- this.SetValue(Canvas.LeftProperty, p.X - _oldPoint.X + (double)this.GetValue(Canvas.LeftProperty));
- this.SetValue(Canvas.TopProperty, p.Y - _oldPoint.Y + (double)this.GetValue(Canvas.TopProperty));
- _oldPoint = p;
- }
- }
- void ActivityControl_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
- {
- if (_isMouseDown)
- {
- _isMouseDown = false;
- this.ReleaseMouseCapture();
- }
- }
- void ActivityControl_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
- {
- _isMouseDown = true;
- _oldPoint = e.GetPosition(null);
- this.CaptureMouse();
- }
我们只需要简单加上e.Handled = false;这句代码就可激活这两个事件了。
silverlight2之所以有这个变化是为了和WPF保持一致。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。