原文: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 实现拖动工具箱效果的更多相关文章

  1. WPF中制作立体效果的文字或LOGO图形

    原文:WPF中制作立体效果的文字或LOGO图形 较久之前,我曾写过一篇:"WPF绘制党徽(立体效果,Cool) "的博文.有感兴趣的朋友来EMAIL问是怎么制作的?本文解决此类问题 ...

  2. 在Android界面特效中如何做出和墨迹天气及UC中左右拖动的效果

    (国内知名Android开发论坛eoe开发者社区推荐:http://www.eoeandroid.com/) 在Android界面特效中如何做出和墨迹天气及UC中左右拖动的效果 相信这么多手机APP中 ...

  3. listview 拖动item效果实现

    listview 拖动item效果实现 效果图如下: 拖拽前: 拖拽后: 首先参考源码中:TouchInterceptor 类,该类会在下面给出: 第一步:主类: /**  *   */ packag ...

  4. WPF绘制党徽(立体效果,Cool)

    原文:WPF绘制党徽(立体效果,Cool) 前面用WPF方式绘制了党旗(WPF制作的党旗) ,去年3月份利用C# 及GDI+绘制过党徽,这次使用WPF来绘制党徽. ------------------ ...

  5. WPF 扩大,回弹效果

    原文:WPF 扩大,回弹效果 <Window x:Class="Fish.AccountBook.View.Test.PanelWindow" xmlns="htt ...

  6. WPF 有趣的动画效果

    WPF 有趣的动画效果         这一次我要呈上一个简单的文章,关于给你的WPF apps加入美丽的光线动画,可是我对动画这东西可能有点入迷了.         实际上.我对动画如此的入迷,以至 ...

  7. WPF图形/文字特别效果之一:交叉效果探讨(续)

    原文:WPF图形/文字特别效果之一:交叉效果探讨(续) 在"WPF图形/文字特别效果之一:交叉效果探讨"(http://blog.csdn.net/johnsuna/archive ...

  8. WPF图形/文字特别效果之一:交叉效果探讨

    原文:WPF图形/文字特别效果之一:交叉效果探讨 为了说明问题,先看下图:图1  完全重叠的单一颜色文字它是2008几个字的叠加,并且颜色为单一的红色.如果不仔细分辨,你或许无法一下子看出是2008. ...

  9. WPF中制作立体效果的文字或LOGO图形(续)

    原文:WPF中制作立体效果的文字或LOGO图形(续) 上篇"WPF中制作立体效果的文字或LOGO图形"(http://blog.csdn.net/johnsuna/archive/ ...

随机推荐

  1. [Docker] Build a Simple Node.js Web Server with Docker

    Learn how to build a simple Node.js web server with Docker. In this lesson, we'll create a Dockerfil ...

  2. 用css3解决移动端页面自适应横屏竖屏的思考

    之前对于横屏的webapp做过一些尝试,可是始终不是非常好的解决方式,前段时间又接触了类似的需求,尝试了感觉更好的解决方式. 之前的方法写的博客:移动网页横竖屏兼容适应的一些体会 这里举的样例还是平时 ...

  3. hprof教程 分类: B1_JAVA 2015-03-02 12:18 444人阅读 评论(0) 收藏

    大部分内容参考http://www.linuxidc.com/Linux/2012-04/58178.htm J2SE中提供了一个简单的命令行工具来对java程序的cpu和heap进行 profili ...

  4. keil快捷键

  5. java用volatile或AtomicBoolean实现高效并发处理 (只初始化一次的功能要求)

    最近碰到一个这样的功能要求:怎么在一个类里面,实现高效并发处理下只可以初始化一次的方法? 实现方式: 1)volatile方式: /** * Created by Chengrui on 2015/7 ...

  6. UVA 1564 - Widget Factory(高斯消元)

    UVA 1564 - Widget Factory 题目链接 题意:n种零件, 给定m个制作时间.每段时间制作k个零件,每种零件有一个制作时间,每段时间用Mon到Sun表示,求每一个零件的制作时间.还 ...

  7. js进阶 11-9/10/11 jquery创建和插入节点

    js进阶 11-9/10/11 jquery创建和插入节点 一.总结 一句话总结: 1.jquery插入节点8个方法? 内部之前,内部之后,之前,之后:各两个 append()和appendTo() ...

  8. 【u005】封锁阳光大学

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹 ...

  9. Fragment嵌套Fragment时遇到的那些坑

    由于项目要改成MVP模式,自然会用到了Fragment,有时候可能会需要一个Fragment里面嵌套多个Fragment,并且add完成后需要立即刷新子Fragment的View,那么这个时候就会抛出 ...

  10. .net core 下监控Sql的执行语句

    原文:.net core 下监控Sql的执行语句 最近在编写.net core程序,因为数据库从Sql Server 切换到 MySql的原因,无法直接查看sql的具体语句,随着业务量的剧增,痛苦也与 ...