专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Silverlight

关于silverlight程序中border(可以是其他的)控件缓慢移动的程序编写解决办法

发布时间:2011-06-27 20:01:30 文章来源:www.iduyao.cn 采编人员:星星草
关于silverlight程序中border(可以是其他的)控件缓慢移动的程序编写
我在网上下了一个程序,但是我并不能完全理解,希望高手能帮帮忙,做一下注释,特别是private void Clock_Tick(object sender, EventArgs e)函数,其次是越详细越好,代码如下:



  public partial class MainPage : UserControl
  {
  private Point mouseStart; //鼠标开始移动的位置
  private Point mouseNow; //鼠标现在的所在位置
  private DispatcherTimer clock; //定义一个计时器
  private bool isMouseDown; //是否按下了鼠标
  double left = 0.0;
  public MainPage()
  {
  InitializeComponent();
  }

  //图片开始移动
  private void border_MouseMove(object sender, MouseEventArgs e)
  {
  if (isMouseDown)
  {
  if (!this.clock.IsEnabled)
  {
  this.clock.Start(); //计时开始
  }
  this.mouseNow = e.GetPosition(this); //获取当前位置
  }
  }

  private void border_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
  {
  isMouseDown = true;
  border.CaptureMouse();
  mouseStart = mouseNow = e.GetPosition(this);
  if (this.clock == null)
  {
  this.clock = new DispatcherTimer();
  this.clock.Interval = new TimeSpan(0, 0, 0, 0, 10);
  this.clock.Tick += new EventHandler(Clock_Tick);
  clock.Start();
  }
  else
  {
  clock.Stop();
  clock.Start();
  }
  }

  private void border_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
  {
  border.ReleaseMouseCapture(); //移除鼠标扑获
  isMouseDown = false;  
  }

  private void Clock_Tick(object sender, EventArgs e)
  {
  const double friction = 0.15;
  left+=((this.mouseNow.X - this.mouseStart.X) * friction) / 2.2;
  border.SetValue(Canvas.LeftProperty, left);
  this.mouseStart.X += ((this.mouseNow.X - this.mouseStart.X) * friction);
  this.mouseStart.Y += ((this.mouseNow.Y - this.mouseStart.Y) * friction);
  if ((Math.Abs(this.mouseNow.X - this.mouseStart.X) < 2) && (Math.Abs(this.mouseNow.Y - this.mouseStart.Y) < 2))
  {
  this.clock.Stop();
  }
  }
  }

------解决方案--------------------
C# code
private void Clock_Tick(object sender, EventArgs e)
  {
  const double friction = 0.15; //定义常量
  left+=((this.mouseNow.X - this.mouseStart.X) * friction) / 2.2; //设置左边的定位位置
  border.SetValue(Canvas.LeftProperty, left);//设置 border的属性 第一个参数
Canvas.LeftProperty 是Canvas这个空间 LeftProperty 左边的属性 第二参数 是 值 意思是 定位 border在Canvas容器中的位置
  this.mouseStart.X += ((this.mouseNow.X - this.mouseStart.X) * friction);//x坐标运算
  this.mouseStart.Y += ((this.mouseNow.Y - this.mouseStart.Y) * friction);//y坐标运算
  if ((Math.Abs(this.mouseNow.X - this.mouseStart.X) < 2) && (Math.Abs(this.mouseNow.Y - this.mouseStart.Y) < 2))//条件判断
  {
  this.clock.Stop();//计时器停止
  }
  }

------解决方案--------------------
public partial class MainPage : UserControl
{
private Point mouseStart; //鼠标开始移动的位置
private Point mouseNow; //鼠标现在的所在位置
private DispatcherTimer clock; //定义一个计时器
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: