中心点设备添加成功了!那么现在该为线的另一点添加绿色球设备,并且让绿色球设备可以被拖动。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;
}
}
{
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编写。