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/ ...
随机推荐
- [TypeStyle] Use TypeStyle keyframes to create CSS animations
We cover CSS keyframes and how to create them using TypeStyle. We then show how to use the keyframes ...
- JobService和JobScheduler机制在Android5.0以上保活
JobService和JobScheduler机制在Android5.0以上保活 我们知道在Android5.0之前,Android源代码还是有不小漏洞的,导致非常多不光明的手段来进行++保活++.但 ...
- generating permunation——全排列(算法汇总)
本文一共提供了4种全排列的方法,包括递归非字典序版本.递归字典序版本.标准库版本和BFS字典序版本,当然BFS非字典序实现相对于BFS字典序版本更加简洁,稍加修改即可. 说明:递归版本基于网上现有代码 ...
- Swift 语言概览 -自己在Xcode6 动手写2-tableView
import UIKit class ViewController: UIViewController ,UITableViewDelegate, UITableViewDataSource { va ...
- MSYS2是对MSYS的一个独立的重写,是基于当前的Cygwin和MinGW-w64重写的,以同原生的Windows软件有更好的交互性为目的
MSYS2的官网:http://sourceforge.net/projects/msys2/ 官网的描述: Description MSYS2 is an independent rewrite o ...
- C# 软件编码规范
一.代码注释 并不是所有的代码均需要注释. 1.类头部注释 /// <summary> /// 描述类的用途 /// 作者: 张三 /// 日期: 2015/12/1 /// </s ...
- PatentTips - Sprite Graphics Rendering System
BACKGROUND This disclosure relates generally to the field of computer graphics. More particularly, b ...
- CEO 系列之一:如何当好创业公司 CEO?(不要用战术的勤奋掩盖战略的懒惰,在创业过程中,最核心问题,就是能把创业情怀变成具体问题。这个问题越具体越好)
1. 创业公司要先定一个目标,要善于把目标简化, 分解成一个, 一个更具体,更简单的问题2. 针对简单的问题进行聚焦, 做深做强3. 在做的过程中, 把断地推出自己的产品到市场上去试错, 要用事实来证 ...
- [Ramda] Difference between R.converge and R.useWith
So what is Point-free function. Take a look this example: const getUpdatedPerson = (person) => R. ...
- 【t101】小明搬家
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 小明要搬家了,大家都来帮忙. 小明现在住在第N楼,总共K个人要把X个大箱子搬上N楼. 最开始X个箱子都 ...