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/ ...
随机推荐
- 【u230】回文词
Time Limit: 1 second Memory Limit: 128 MB [问题描述] CR喜欢研究回文词,有天他发现一篇文章,里面有很多回文数,这使他来了兴趣.他决定找出所有长度在n个字节 ...
- LeetCode——Set Matrix Zeroes
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. 原题链接:h ...
- iOS开发AFN使用二:AFN文件下载与文件上传
#import "ViewController.h" #import "AFNetworking.h" @interface ViewController () ...
- 用Ajax图片上传、预览、修改图片
首选图片的上传和下载并不是很难,但要注意细节. 一,给出前端图片上传的html代码 1.图片上传的控件 <img src="/${res}/images/default.png&quo ...
- 【前端统计图】echarts实现单条折线图
五分钟上手: 图片.png <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- Spring mvc redirect跳转路径问题
SpringMVC重定向视图RedirectView小分析 前言 SpringMVC是目前主流的Web MVC框架之一. 本文所讲的部分内容跟SpringMVC的视图机制有关,SpringMVC的视图 ...
- _Decoder_Interface_init xxxxxx in amrFileCodec.o
Undefined symbols for architecture arm64: "_Decoder_Interface_init", referenced from: Deco ...
- 学习鸟哥的Linux私房菜笔记(10)——bash2
七.命令行表达式 命令行输出--" " 将一串字符当成一个字符串来对待,如果字符串中包含特殊含义的字符,则转义. 双引号不能将 \ $ ` ! 符号的特殊功能禁止 命令行输出--' ...
- [02]基于webservice权限系统
面前,我们已经介绍过.如何使用cxf建立webservice. 那我们要介绍的这款许可制度表结构. 此权限管理系统分为部门管理.员工管理.角色管理,权限管理,授权的人才和企业管理(这里不涉及) 角色管 ...
- Android菜鸟的成长笔记(23)——获取网络和SIM卡信息
TelephonyManager是一个管理手机通话状态.电话网络信息的服务类,该类提供了大量的getXxx()方法来获取电话网络的相关信息.这些信息包括设备编号.软件版本.网络运营商代号.网络运营商名 ...