示例中的两个图形分别包含在两个子画布中,这两个子画布共享相同的事件处理器,分别是MouseleftbuttonDown、MouseMove和MouseleftbuttonUp事件,XAML代码如下所示。
<Canvas x:name="parentCanvas"
xmlns="http://schemas.microsoft.com/clIEnt/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Loaded="Page_Loaded"
x:Class="DragandDropDemo.Page;assembly=ClIEntBin/DragandDropDemo.dll"
WIDth="640"
Height="480"
Background="White"
>
<!-- 定义两个圆形对象,形成一个圆环效果-->
<Canvas
MouseleftbuttonDown="onMouseDown"
MouseleftbuttonUp="onmouseup"
MouseMove="onMouseMove"
Canvas.top="20" Canvas.left="50">
<Ellipse
Height="100" WIDth="100"
Fill="Gold"
stroke="Black" strokeThickness="4" />
<Ellipse
Height="50" WIDth="50"
Canvas.top="25" Canvas.left="25"
Fill="Black" />
</Canvas>
<!-- 定义一个钻石形状 -->
<Canvas
MouseleftbuttonDown="onMouseDown"
MouseleftbuttonUp="onmouseup"
MouseMove="onMouseMove"
Canvas.top="140" Canvas.left="100">
<!--使用旋转渐变让该画布旋转45度-->
<Canvas.Rendertransform>
<Rotatetransform Angle="45" />
</Canvas.Rendertransform>
<Rectangle
Height="100" WIDth="100"
Fill="Coral"
stroke="Black" strokeThickness="4" />
</Canvas>
</Canvas>
上面的代码很简单的画了两个图形,分别位于两个画布中,拖动的实际代码如下所示。
using System;
using System.windows;
using System.windows.Controls;
using System.windows.documents;
using System.windows.Ink;
using System.windows.input;
using System.windows.Media;
using System.windows.Media.Animation;
using System.windows.Shapes;
namespace DragandDropDemo
{
public partial class Page : Canvas
{
//beginX和beginY用于保存鼠标上一次的位置
private double beginX;
private double beginY;
//isMouseDown获取和设置鼠标是否按下的布尔变量
private bool isMouseDown = false;
public voID Page_Loaded(object o,EventArgs e)
{
// required to initialize variables
InitializeComponent();
}
//鼠标左键按下时的事件代码
public voID onMouseDown(object sender,MouseEventArgs e)
{
//将当前的鼠标位置传给私有变量
beginX = e.Getposition(null).X;
beginY = e.Getposition(null).Y;
//将isMouseDown设为true表示鼠标按下。
isMouseDown = true;
//由于CaptureMouse都定义在UIElement中,所以这里、转换为UIElement类
((UIElement)sender).CaptureMouse();
}
//鼠标移动
public voID onMouseMove(object sender,MouseEventArgs e)
{
//如果鼠标处理按下状态
if (isMouseDown == true)
{
//获取鼠标当前位置
double currX = e.Getposition(null).X;
double currY = e.Getposition(null).Y;
//获取当前图形的位置
double currleft = (double)((UIElement)sender).GetValue(Canvas.leftProperty);
double currtop = (double)((UIElement)sender).GetValue(Canvas.topProperty);
//移动当前图形的位置
((UIElement)sender).SetValue(Canvas.leftProperty,currleft + currX - beginX);
((UIElement)sender).SetValue(Canvas.topProperty,currtop + currY - beginY);
//将当前位置保存起来,继续拖动。
beginX = currX;
beginY = currY;
}
}
//释放鼠标左键
public voID onmouseup(object sender,MouseEventArgs e)
{
isMouseDown = false;
//停止鼠标捕捉
((UIElement)sender).ReleaseMouseCapture();
}
}
}
来源于http://blog.csdn.net/silverlightria/article/details/2323740
总结以上是内存溢出为你收集整理的silverlight canvas 鼠标拖动canvas全部内容,希望文章能够帮你解决silverlight canvas 鼠标拖动canvas所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)