WPF 实现拖动工具箱效果
1.效果
点击左边的矩形拖动到右边canvas面板,右边面板添加矩形
2.布局
左边是个StockPanel,上面有个矩形,右边是个Canvas面板。
矩形是源,Canvas面板是目的,AllowDrop属性都要设成true,矩形框要有填充色,Canvas要有background,否则无法响应鼠标拖拽事件。
3.矩形框点击事件
private void rectangle1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Rectangle rect = sender as Rectangle;
//创建新矩形
Rectangle temp = new Rectangle();
temp.Width = rect.Width;
temp.Height = rect.Height;
temp.Fill = rect.Fill;
temp.Stroke = rect.Stroke;
//添加移动事件
temp.MouseLeftButtonDown += new MouseButtonEventHandler(module_MouseLeftButtonDown);
temp.MouseMove += new MouseEventHandler(module_MouseMove);
temp.MouseLeftButtonUp += new MouseButtonEventHandler(module_MouseLeftButtonUp);
DragDrop.DoDragDrop(temp, temp, DragDropEffects.Copy);
}
4.Canvas响应事件
private void canvas1_Drop(object sender, DragEventArgs e)
{
Rectangle r = (Rectangle)e.Data.GetData(typeof(Rectangle));
Point p = e.GetPosition(canvas1);
r.SetValue(Canvas.TopProperty, p.Y-r.Height/2);
r.SetValue(Canvas.LeftProperty, p.X-r.Width/2);
canvas1.Children.Add(r);
}
5.Canvas内的矩形拖动
void module_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Rectangle rect = sender as Rectangle;
mouseposition = e.GetPosition(canvas1);
mousedown = true;
rect.CaptureMouse();
}
void module_MouseMove(object sender, MouseEventArgs e)
{
Rectangle rect = sender as Rectangle;
if (mousedown) {
double deltav = e.GetPosition(canvas1).Y - mouseposition.Y;
double deltah = e.GetPosition(canvas1).X - mouseposition.X;
double newtop = deltav + (double)rect.GetValue(Canvas.TopProperty);
double newleft = deltah + (double)rect.GetValue(Canvas.LeftProperty);
rect.SetValue(Canvas.TopProperty, newtop);
rect.SetValue(Canvas.LeftProperty, newleft);
mouseposition = e.GetPosition(canvas1);
}
}
void module_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
Rectangle rect = sender as Rectangle;
mousedown = false;
rect.ReleaseMouseCapture();
mouseposition.X = mouseposition.Y = 0;
}
WPF 实现拖动工具箱效果的更多相关文章
- WPF中制作立体效果的文字或LOGO图形
原文:WPF中制作立体效果的文字或LOGO图形 较久之前,我曾写过一篇:"WPF绘制党徽(立体效果,Cool) "的博文.有感兴趣的朋友来EMAIL问是怎么制作的?本文解决此类问题 ...
- 在Android界面特效中如何做出和墨迹天气及UC中左右拖动的效果
(国内知名Android开发论坛eoe开发者社区推荐:http://www.eoeandroid.com/) 在Android界面特效中如何做出和墨迹天气及UC中左右拖动的效果 相信这么多手机APP中 ...
- listview 拖动item效果实现
listview 拖动item效果实现 效果图如下: 拖拽前: 拖拽后: 首先参考源码中:TouchInterceptor 类,该类会在下面给出: 第一步:主类: /** * */ packag ...
- WPF绘制党徽(立体效果,Cool)
原文:WPF绘制党徽(立体效果,Cool) 前面用WPF方式绘制了党旗(WPF制作的党旗) ,去年3月份利用C# 及GDI+绘制过党徽,这次使用WPF来绘制党徽. ------------------ ...
- WPF 扩大,回弹效果
原文:WPF 扩大,回弹效果 <Window x:Class="Fish.AccountBook.View.Test.PanelWindow" xmlns="htt ...
- WPF 有趣的动画效果
WPF 有趣的动画效果 这一次我要呈上一个简单的文章,关于给你的WPF apps加入美丽的光线动画,可是我对动画这东西可能有点入迷了. 实际上.我对动画如此的入迷,以至 ...
- WPF图形/文字特别效果之一:交叉效果探讨(续)
原文:WPF图形/文字特别效果之一:交叉效果探讨(续) 在"WPF图形/文字特别效果之一:交叉效果探讨"(http://blog.csdn.net/johnsuna/archive ...
- WPF图形/文字特别效果之一:交叉效果探讨
原文:WPF图形/文字特别效果之一:交叉效果探讨 为了说明问题,先看下图:图1 完全重叠的单一颜色文字它是2008几个字的叠加,并且颜色为单一的红色.如果不仔细分辨,你或许无法一下子看出是2008. ...
- WPF中制作立体效果的文字或LOGO图形(续)
原文:WPF中制作立体效果的文字或LOGO图形(续) 上篇"WPF中制作立体效果的文字或LOGO图形"(http://blog.csdn.net/johnsuna/archive/ ...
随机推荐
- Activity生命周期的回调,你应该知道得很多其它!--Android源代码剖析(下)
转载请标明原文地址:http://blog.csdn.net/yalinfendou/article/details/46910811[yalinfendou的博客] ...
- JavaScript的Math对象
原文 简书原文:https://www.jianshu.com/p/8776ec9cfb58 大纲 前言 1.Math对象的值属性 2.Math对象的函数属性 3.Math对象的函数的使用 前言 Ma ...
- 【55.70%】【codeforces 557A】Ilya and Diplomas
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- Gcc 的使用
Gcc 的使用前言 编译器在编译过程中,先将程序代码编译成 object 文件,然後再和程序库联结,成为可执行文件.因此一个编译器须提供的参数主要有几类: 1.指定编译器编出的object 文件或 ...
- jquery获取元素坐标获取鼠标坐标
获取页面某一元素的绝对X,Y坐标,可以用offset()方法: var X = $('#DivID').offset().top; var Y = $('#DivID').offset().left; ...
- GLPI-开源资产管理软件
https://github.com/glpi-project/glpi/releases/tag/9.2.3 http://glpi-project.org/downloads/ 开源资产管理软件- ...
- ASP.Net WebAPI HttpDelete/PUT方法运行或发布到生产服务器上后出现405(Method Not Allowed)错误的解决办法
原文:ASP.Net WebAPI HttpDelete/PUT方法运行或发布到生产服务器上后出现405(Method Not Allowed)错误的解决办法 本文只是个人的理解和学习记录,如果觉得本 ...
- XxPay支付系统-boot版本了解一下
了解一下 之前看了龙果支付系统,也没看透,用公司框架改写,然后就改的比较乱
- 教你如何利用php.exe运行php文件
教你如何利用php.exe运行php文件 一.总结 一句话总结:就是使用的php.exe,和java中的javac一样,都是有exe,然后有了对应命令,比如php.exe,然后就可以用php命令. 1 ...
- 如何使用Name对象,包括WorkspaceNames和DatasetNames
转自chanyinhelv原文 如何使用Name对象,包括WorkspaceNames和DatasetNames 第一原文链接 该博主还有很多有关arcgis二次开发的不错的文章. 如何使用Name对 ...