技术开发 频道

Silverlight窍门:绘制工程图基础小动画

  中心点设备添加成功了!那么现在该为线的另一点添加绿色球设备,并且让绿色球设备可以被拖动。ucLine.xaml代码中需要添加一句:

<Image x:Name="green" Source="green.png" Width="44"  Canvas.ZIndex="300" Height="44"></Image>

  ucLine控件的代码页主要是为绿色球添加拖动控件,在拖动的过程中,也要让线的结尾点坐标跟随到拖动的绿色球位置。其ucLine.xaml.cs代码修改如下:

  public partial class ucLine : UserControl

  {

  
public ucLine()

  {

  InitializeComponent();

  dragBehavior.Attach(
this.green);

  dragBehavior.Dragging
+= new MouseEventHandler(dragBehavior_Dragging);

  }

  MouseDragElementBehavior dragBehavior
= new MouseDragElementBehavior();

  
private double _R;

  
private double _AngleAll;

  
private double _centerX;

  
private double _centerY;

  
///

  
/// 中心圆半径

  
///

  
public double R

  {

  
get { return _R; }

  
set { _R = value; }

  }

  
private double _X2;

  
private double _Y2;

  
///

  
/// 指定本控件的X2坐标

  
///

  
public double X2

  {

  
get { return _X2; }

  
set

  {

  _X2
= value;

  
this.LineD.X2 = this.X2;

  }

  }

  
///

  
/// 指定本控件的Y2坐标

  
///

  
public double Y2

  {

  
get { return _Y2; }

  
set

  {

  _Y2
= value;

  
this.LineD.Y2 = this.Y2;

  }

  }

  
///

  
/// 本控件的中心原点X坐标

  
///

  
public double CenterX

  {

  
get { return _centerX; }

  
set

  {

  _centerX
= value;

  
this.LineD.X1 = _centerX;

  }

  }

  
///

  
/// 本控件的中心原点Y坐标

  
///

  
public double CenterY

  {

  
get { return _centerY; }

  
set

  {

  _centerY
= value;

  
this.LineD.Y1 = _centerY;

  }

  }

  
///

  
/// 本控件的起始线弧度

  
///

  
public double AngleAll

  {

  
get { return _AngleAll; }

  
set

  {

  _AngleAll
= value;

  
//计算得到角度,然后复制给线的终点坐标位置。注意:设置线终点坐标时须加入线的起点位置

  
double sinAngle = Math.Sin(this.AngleAll * Math.PI / 180);

  
double cosAngle = Math.Cos(this.AngleAll * Math.PI / 180);

  
this.LineD.X2 = cosAngle * this.R + this.CenterX;

  
this.LineD.Y2 = this.CenterY - sinAngle * this.R;

  
//设置绿色球的坐标位置。

  
this.green.SetValue(Canvas.LeftProperty, this.LineD.X2 - 22);

  
this.green.SetValue(Canvas.TopProperty, this.LineD.Y2 - 22);

  }

  }

  
///

  
/// green被拖动的时候触发的事件

  
///

  
///

  
///

  
void dragBehavior_Dragging(object sender, MouseEventArgs e)

  {

  MouseDragElementBehavior dragBehavior2
= sender as MouseDragElementBehavior;

  
double x1 = dragBehavior2.X + 22;

  
double y1 = dragBehavior2.Y + 22;

  
//设置本条线的结尾点坐标为拖动后的坐标

  
this.LineD.X2 = x1;

  
this.LineD.Y2 = y1;

  }

  }

  现在所有的动画已经完成,本实例采用VS2010+Silverlight编写。

0
相关文章