微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

silverlight 2 事件变化

在silverlight2中,事件的处理发生了些变化,类似button,togglebutton等控件的MouseLeftButtonDown,MouseLeftButtonUp等事件已经在类的级别设置为已处理,因此这些类的实例不会再响应这两个事件,当然我们有时候依然要用到这两个事件,解决方法也很简单。我们需要重载这些类的OnMouseLeftButtonDown和OnMouseLeftButtonUp方法来设置已处理的标志为未处理就可以了。

  1. public class ActivityControl : Button
  2.     {
  3.         private bool _isMouseDown = false;
  4.         private Point _oldPoint;
  5.         public ActivityType ActivityType { getset; }
  6.         public ActivityControl()
  7.         {
  8.             this.MouseLeftButtonDown += new MouseButtonEventHandler(ActivityControl_MouseLeftButtonDown);
  9.             this.MouseLeftButtonUp += new MouseButtonEventHandler(ActivityControl_MouseLeftButtonUp);
  10.             this.MouseMove += new MouseEventHandler(ActivityControl_MouseMove);
  11.         }
  12.         protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
  13.         {
  14.             base.OnMouseLeftButtonDown(e);
  15.             e.Handled = false;
  16.         }
  17.         protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
  18.         {
  19.             base.OnMouseLeftButtonUp(e);
  20.             e.Handled = false;
  21.         }
  22.         void ActivityControl_MouseMove(object sender, MouseEventArgs e)
  23.         {
  24.             if (_isMouseDown)
  25.             {
  26.                 Point p = e.GetPosition(null);
  27.                 this.SetValue(Canvas.LeftProperty, p.X - _oldPoint.X + (double)this.GetValue(Canvas.LeftProperty));
  28.                 this.SetValue(Canvas.TopProperty, p.Y - _oldPoint.Y + (double)this.GetValue(Canvas.TopProperty));
  29.                 _oldPoint = p;
  30.             }
  31.         }
  32.         void ActivityControl_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
  33.         {
  34.             if (_isMouseDown)
  35.             {
  36.                 _isMouseDown = false;
  37.                 this.ReleaseMouseCapture();
  38.             }
  39.         }
  40.         void ActivityControl_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
  41.         {
  42.             _isMouseDown = true;
  43.             _oldPoint = e.GetPosition(null);
  44.             this.CaptureMouse();
  45.         }

我们只需要简单加上e.Handled = false;这句代码就可激活这两个事件了。

silverlight2之所以有这个变化是为了和WPF保持一致。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐