silverlight canvas 鼠标拖动canvas
来源:互联网 发布:mhk考试软件下载 编辑:程序博客网 时间:2024/06/06 05:56
示例中的两个图形分别包含在两个子画布中,这两个子画布共享相同的事件处理器,分别是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
- Javascript canvas 拖动鼠标截图
- wpf Canvas 限定范围拖动 鼠标滚轴改变大小
- wpf Canvas 限定范围拖动 鼠标滚轴改变大小
- 用canvas实现鼠标拖动绘制矩形框
- canvas 拖动效果
- canvas拖动图片
- silverlight 中 canvas布局
- Silverlight behavior 鼠标拖动
- canvas之鼠标事件
- 火焰鼠标跟随 canvas
- canvas 鼠标移动矩形
- canvas实现鼠标划线
- h5 canvas 鼠标绘画
- Canvas
- Canvas
- canvas
- Canvas
- Android 4+ WIFI 直连
- 一步一步学Silverlight 系列文章
- 第四周任务一
- Iphone xcode 代码错误调试
- 技术人员面对如此多的技术,掌握研发能力,才是最关键(无招胜有招)
- silverlight canvas 鼠标拖动canvas
- QTP10.0无法进入录制模式的解决方法
- struts2工作流程
- MyEclipse6.5+tomcat6.0+jdk1.6 开发环境搭建
- Android APK 扩展文件
- 设计模式系列-装饰模式
- APK权限大全 - Android必懂知识
- 设计模式——策略模式(Strategy)
- 关于List<T>和ArrayList<T>执行效率问题