原文:【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. 用python实现批量获取Linux主机简要信息并保存到Excel中 unstable 1.1

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- #filename get_linux_info.py #获取Linux主机的信息 # titles=[' ...

  2. 面试题:实现call、apply、bind

    面试题:实现call.apply.bind 实现bind module.exports = function(Tcontext, ...args) { let globalThis = typeof ...

  3. runtime之归档和解档

    IOS开发之NSCoding协议(使用runtime)近期学习IOS的runtime库,然后看到之前写的NSCoding协议有点复杂,如果属性少还好,如果100多个属性,则会显得麻烦.下面使用常规方式 ...

  4. numpy 中的broadcast 机制

    https://www.cnblogs.com/jiaxin359/p/9021726.html

  5. 五、Redis五种类型 - 字符串类型

    1.介绍: 字符串类型是Redis中最基本的数据类型,可以存储任何形式的字符串数据,最大容量是512MB. key 和 value 都是区分大小写的. 2.命令介绍 (1).赋值: set key v ...

  6. java命令-jstat/ javap

    jstat命令对应用程序资源和性能进行实时监控 常用参数列举如下: 1. jstat -class pid 显示加载class的数量.所占空间.所耗时间等信息 2.jstat -compiler pi ...

  7. 0xC0000005: 写入位置 0x00000000 时发生访问冲突的解决办法(转)

    上面的意识就是你吧值付给了不该赋给的变量,或者说你把值付给了不能付给的变量(或者常量) ()最简单也最直接的错误可能就是scanf()的问题,我们都知道输入的时候都是scanf("%格式&q ...

  8. paper 143:人脸验证

    持续更新ing,敬请期待! 参考:http://blog.csdn.net/stdcoutzyx/article/details/42091205  1. DeepID人脸识别算法 香港中文大学的团队 ...

  9. 经典的MySQL Duplicate entry报错注入

    SQL注射取数据的方式有多种: 利用union select查询直接在页面上返回数据,这种最为常见,一个前提是攻击者能够构造闭合的查询. Oracle中利用监听UTL_HTTP.request发起的H ...

  10. js、jQuery实现文字上下无缝轮播、滚动效果

    因项目需要实现消息通知上下无缝轮播的效果,所以写了一下,在这个分享出来,希望再次遇到此需求的道友,可以直接拷贝来用,节约一点不必要的时间. 原生JS版本 <!DOCTYPE html> & ...