原文: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. 【u230】回文词

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] CR喜欢研究回文词,有天他发现一篇文章,里面有很多回文数,这使他来了兴趣.他决定找出所有长度在n个字节 ...

  2. 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 ...

  3. iOS开发AFN使用二:AFN文件下载与文件上传

    #import "ViewController.h" #import "AFNetworking.h" @interface ViewController () ...

  4. 用Ajax图片上传、预览、修改图片

    首选图片的上传和下载并不是很难,但要注意细节. 一,给出前端图片上传的html代码 1.图片上传的控件 <img src="/${res}/images/default.png&quo ...

  5. 【前端统计图】echarts实现单条折线图

    五分钟上手: 图片.png <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  6. Spring mvc redirect跳转路径问题

    SpringMVC重定向视图RedirectView小分析 前言 SpringMVC是目前主流的Web MVC框架之一. 本文所讲的部分内容跟SpringMVC的视图机制有关,SpringMVC的视图 ...

  7. _Decoder_Interface_init xxxxxx in amrFileCodec.o

    Undefined symbols for architecture arm64: "_Decoder_Interface_init", referenced from: Deco ...

  8. 学习鸟哥的Linux私房菜笔记(10)——bash2

    七.命令行表达式 命令行输出--" " 将一串字符当成一个字符串来对待,如果字符串中包含特殊含义的字符,则转义. 双引号不能将 \ $ ` ! 符号的特殊功能禁止 命令行输出--' ...

  9. [02]基于webservice权限系统

    面前,我们已经介绍过.如何使用cxf建立webservice. 那我们要介绍的这款许可制度表结构. 此权限管理系统分为部门管理.员工管理.角色管理,权限管理,授权的人才和企业管理(这里不涉及) 角色管 ...

  10. Android菜鸟的成长笔记(23)——获取网络和SIM卡信息

    TelephonyManager是一个管理手机通话状态.电话网络信息的服务类,该类提供了大量的getXxx()方法来获取电话网络的相关信息.这些信息包括设备编号.软件版本.网络运营商代号.网络运营商名 ...