【WPF】一些拖拽实现方法的总结(Window,UserControl)
原文:【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)的更多相关文章
- 【WPF】这可能是全网最全的拖拽实现方法的总结
原文地址 https://www.cnblogs.com/younShieh/p/10811456.html 前文 本文只对笔者学习掌握的一般的拖动问题的实现方法进行整理和讨论,包括窗口.控件等内容的 ...
- 【转】C#.net拖拽实现获得文件路径
C#.net拖拽实现获得文件路径 作者Attilax , EMAIL:1466519819@qq.com 思路: 通过DragEnter事件获得被拖入窗口的“信息”(可以是若干文件,一些文字等等), ...
- WPF ListView 简单的拖拽实现(转)
首先设置ListView的AllowDrop=True:SelectionMode=Extended;并且ListView视图为GridVIew. private void listView1_Mou ...
- Silverlight中的拖拽实现的图片上传
原文 http://blog.csdn.net/dujingjing1230/article/details/5443003 在Silverlight中因为可以直接从系统的文件夹里面拖出来一个文件直接 ...
- html5简单拖拽实现自动左右贴边+幸运大转盘
此篇文章主要实现两个功能: 1.点击屏幕下方签到悬浮按钮: 2.弹出幸运大转盘,转盘抽奖签到 效果如图: 在网上找了很多移动端拖拽的js实现方式,大部分都是这一种,html5的touch事件,但是 ...
- android自定义控件(2)-拖拽实现开关切换
在这里,我们的主要工作就是在原有代码的基础上,增加一个重写的onTouchEvent方法,刚添加上来的时候是这个样子的: @Override public boolean onTouchEvent(M ...
- C#.net拖拽实现获得文件路径
思路: 通过DragEnter事件获得被拖入窗口的“信息”(可以是若干文件,一些文字等等), 在DragDrop事件中对“信息”进行解析. 窗体的AllowDrop属性必须设置成tru ...
- HTML5元素拖拽实现示例
HTML5现在前端圈中,已然成为一个不那么新的技术词汇了,很多公司也把HTML5也当成了硬性的技能要求,但是很多前端恐怕都不了解HTML5的拖拽怎么实现吧. 看了下极客学院的视频,大概的了解了下思路. ...
- selenium操作拖拽实现无效果的替代方案
如果碰到这种情况,无论你是直接通过draganddrop()还是分步执行clickandhold(),dragtoelement(),或通过by_offset位移都无法实现元素拖拽.只能物理模拟了 w ...
随机推荐
- FZU 1876 JinYueTuan(排列组合)
Description Let’s have a look at the picture below Now, do you know what it’s? Yeah , O(∩_∩)O~ , It ...
- python 大小写转换函数
capitalize() 首字母大写,其余全部小写 upper() 全转换成大写 lower() 全转换成小写 title() 标题首字大写,如"i love python".t ...
- Aspnetcore下面服务器热更新与配置热加载
原文:Aspnetcore下面服务器热更新与配置热加载 Asp.net的热更新方案Appdomain在aspnetcore中不被支持了 新的方案如下: 配置文件更新选项 reloadOnChange ...
- Spring学习笔记(10)——方法注入
引用 在大部分情况下,容器中的bean都是singleton类型的.如果一个singleton bean要引用另外一个singleton bean,或者一个非singleton bean要引用另外一个 ...
- SQL数据库—<2>数据库基本操作(CRUD)
学习基本操作语句之前先简单了解数据库的基本数据类型: 数据类型: 二进制数据:以十六进制形式存储 固定长度:binary 可变长度:varbinary 字符数据 ...
- 字符串String的使用方法
var ddd = "举头望明月,低头思故乡" document.writeln(ddd.split(''));//选择字符串中的一个标识符,将字符串分割成数组; var slic ...
- 有趣的taskset命令,使进程再指定CPU上运行
前言 taskset命令,用于进程的CPU调优,可以把某进程,指定再某CPU内工作. 如还不明白,可以参考此文 http://www.361way.com/linux-context-switch/5 ...
- get和post 两种基本请求方式的区别
GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数. 你可能自己 ...
- 【leetcode】985. Sum of Even Numbers After Queries
题目如下: We have an array A of integers, and an array queries of queries. For the i-th query val = quer ...
- Python--字符编码、文字处理、函数
了解字符编码的知识储备 我们日常用到的文本编辑器有nodepad++,pycharm,word等等,用他们存取文件的过程大致类似,需要知道打开编辑器就打开了启动了一个进程,是在内存中的,所以在编辑器编 ...