原文:【WPF】一些拖拽实现方法的总结(Window,UserControl)

原文地址 https://www.cnblogs.com/younShieh/p/10811456.html

前文

  • 本文只对笔者学习掌握的一般的拖动问题的实现方法进行整理和讨论,包括窗口、控件等内容的拖动。
  • 希望本文能对一些寻找此问题的解决方法的人和一些刚入门的人一些帮助,能得到各位的批评指正也是荣幸万分。有更好的方法,劳烦与我分享,不胜感激。
  • 本文的各种实现方法其它博客中也都有涉及,很多文章内容详实,有图有代码,笔者就不重复造轮子了。就写写自己的一些理解吧。

关键词

Window, UserControls, Drag


参考资料

http://www.cnblogs.com/DebugLZQ/archive/2013/05/07/3062733.html

这篇文章的介绍非常全面,基本覆盖了所有拖动方法。值得学习参考。


正文

1. 窗口的拖拽

我们知道,鼠标放在窗口的标题栏上按下就可以拖动窗体。我们要实现在窗口的全部地方或特定地方按下鼠标左键实现拖动。

【推荐】 使用 DragMove()方法,可以完全胜任。

  使用参考: http://www.cnblogs.com/DebugLZQ/archive/2013/05/07/3062733.html

    ---分割线---

  其它:

  1. 自定义标题栏,使用WindowChrome

  适用于无边框自定义窗体,又不想去实现双击全屏,标题栏右键菜单的情况。简称比较懒得情况。(个人感觉使用起来感觉可控性不是很好,还是自己重新设计舒服。ヽ(ー_ー)ノ

  2. 利用SendMessage实现窗口拖动

  适用于。。。我也不是很清楚,没咋用过(`・ω・´)。原理就是通过向窗口发送API User32中包含的移动命令来实现移动。学习学习。

  使用参考: https://www.cnblogs.com/zhouyinhui/archive/2009/08/28/1555870.html

  顺便分享一个互操作维基,可以查到所有Windows API的使用方法,用到的时候查一下非常方便。瞎吉尔百度可能会有错误答案的说。。



2.控件的拖拽

【推荐】 使用Blend中的行为来实现拖动

  强大的VS Blend提供了实现拖拽的行为(behavior),不用自己去计算和完成具体实现,使用起来极为方便,真正实现“点一下玩一年”,非常适合我这种懒人。

  使用参考: https://www.cnblogs.com/YGYH/archive/2010/09/10/1822724.html

  问题:这个拖拽行为虽然使用起来方便,但是只适用于子控件在父容器中拖拽的情况。

    ---分割线---

  其它:

  1. 通过RenderTransform的TranslateTransform属性实现

在二维 x-y 坐标系统内平移(移动)对象。

  RenderTransform属性可以实现界面的转换、旋转、缩放、倾斜、翻转等各种功能。所以我们只需要获得拖拽时改变的值后,就能对各种控件进行位置转换。

  使用参考: https://blog.csdn.net/qq_18995513/article/details/72765269#

  2. 【推荐】Thumb控件

表示可由用户拖动的控件。

  依赖于父容器进行使用,可以通过控件拖动时的属性值就能获取控件的垂直变化量和水平变化量。拖动DeltaEventArgs类在使用时,可以将按钮、图片等需要实现拖拽的内容放到Thumb下,通过拖拽Thumb来实现内容物的拖拽。参考学习这篇博文的2.1项

  3. Canvas容器中的子控件,通过点击下时记录的点,然后计算移动时的点的变化量,来重新计算子控件与父容器的相对位置。

参考学习这篇博文的2.3项

  4. Grid容器中的子控件拖拽的实现方法与Canvas大同小异,参考学习这篇博文的2.4项


后文

  以上应该就是在WPF中的各种拖拽的实现方法了,有简单的,也有复杂的。具体使用哪个,应该还是要根据使用需求来用。不过常用的就那几个(逃~

【WPF】一些拖拽实现方法的总结(Window,UserControl)的更多相关文章

  1. 【WPF】这可能是全网最全的拖拽实现方法的总结

    原文地址 https://www.cnblogs.com/younShieh/p/10811456.html 前文 本文只对笔者学习掌握的一般的拖动问题的实现方法进行整理和讨论,包括窗口.控件等内容的 ...

  2. 【转】C#.net拖拽实现获得文件路径

    C#.net拖拽实现获得文件路径 作者Attilax ,  EMAIL:1466519819@qq.com 思路: 通过DragEnter事件获得被拖入窗口的“信息”(可以是若干文件,一些文字等等), ...

  3. WPF ListView 简单的拖拽实现(转)

    首先设置ListView的AllowDrop=True:SelectionMode=Extended;并且ListView视图为GridVIew. private void listView1_Mou ...

  4. Silverlight中的拖拽实现的图片上传

    原文 http://blog.csdn.net/dujingjing1230/article/details/5443003 在Silverlight中因为可以直接从系统的文件夹里面拖出来一个文件直接 ...

  5. html5简单拖拽实现自动左右贴边+幸运大转盘

    此篇文章主要实现两个功能: 1.点击屏幕下方签到悬浮按钮: 2.弹出幸运大转盘,转盘抽奖签到 效果如图: ​ 在网上找了很多移动端拖拽的js实现方式,大部分都是这一种,html5的touch事件,但是 ...

  6. android自定义控件(2)-拖拽实现开关切换

    在这里,我们的主要工作就是在原有代码的基础上,增加一个重写的onTouchEvent方法,刚添加上来的时候是这个样子的: @Override public boolean onTouchEvent(M ...

  7. C#.net拖拽实现获得文件路径

    思路: 通过DragEnter事件获得被拖入窗口的“信息”(可以是若干文件,一些文字等等),  在DragDrop事件中对“信息”进行解析.        窗体的AllowDrop属性必须设置成tru ...

  8. HTML5元素拖拽实现示例

    HTML5现在前端圈中,已然成为一个不那么新的技术词汇了,很多公司也把HTML5也当成了硬性的技能要求,但是很多前端恐怕都不了解HTML5的拖拽怎么实现吧. 看了下极客学院的视频,大概的了解了下思路. ...

  9. selenium操作拖拽实现无效果的替代方案

    如果碰到这种情况,无论你是直接通过draganddrop()还是分步执行clickandhold(),dragtoelement(),或通过by_offset位移都无法实现元素拖拽.只能物理模拟了 w ...

随机推荐

  1. git 上传本地代码

    新增本地代码到远程库 http://blog.csdn.net/hanhailong726188/article/details/46738929 github配置教程 http://www.runo ...

  2. RabbitMq--2--安装

    简单说下个人的理解,mq就是一个消息代理,负责异步消息转发,可以很大程度缓解服务器压力,并且防止服务器宕机影响业务等. 安装: 环境:centos7 1).首先需要安装erlang #wget htt ...

  3. java 调用DB2 SYSPROC.ADMIN_CMD存储过程导出数据

    import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import ...

  4. 拓展练习部分---打包压缩 及 RPM工具

    目录 打包压缩部分 1.linux下常见的压缩包类型有哪些 rpm 工具部分 打包压缩部分 1.linux下常见的压缩包类型有哪些 .zip .gz 会删除源文件 .bz2 会删除源文件 .tar.g ...

  5. ThreadLocal简单使用示例

    ThreadLocal为每个线程提供单独的数据副本,线程间的数据为自身线程所独有(不存在共享变量问题),直接看代码 public class ThreadLocalTest { private sta ...

  6. python读写excel(xlrd、xlwt)

    一.读excel表 读excel用到xlrd模块,写excel用到xlwt模块: # 1.导入模块 import xlrd # 2.打开Excel文件读取数据 workbook = xlrd.open ...

  7. 一次峰回路转的getshell

    扫目录发现 http://www.xxx.test.cn/bak/以及/bak/upload.jsp

  8. 查询qq登陆状态

    function qq_status(){ if (empty($qq))$qq = 287959133; $url = 'http://wpa.qq.com/pa?p=2:'.$qq.':52'; ...

  9. Linux下用户-组权限配置

    cat /etc/group cat /etc/ashadow 一.用户管理 1.添加用户 #useradd 用户名 useradd php100;用cat /etc/passwd查看 分析:php1 ...

  10. paper 144:人生苦短,快用Python

    1.Python 语言特点 Python是一种面向对象.直译式计算机程序设计语言,这种语言的语法简捷而清晰,具有丰富和强大的类库,基本上能胜任你平时需要的编程工作. Python的优点: (1)编写的 ...