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

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

前文

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

关键词

Window, UserControls, Dragchrome


参考资料

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

这篇文章的介绍很是全面,基本覆盖了全部拖动方法。值得学习参考。windows


正文

1. 窗口的拖拽api

咱们知道,鼠标放在窗口的标题栏上按下就能够拖动窗体。咱们要实如今窗口的所有地方或特定地方按下鼠标左键实现拖动。学习

【推荐】 使用 DragMove()方法,能够彻底胜任。ui

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

    ---分割线---.net

  其它:设计

  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中的各类拖拽的实现方法了,有简单的,也有复杂的。具体使用哪一个,应该仍是要根据使用需求来用。不过经常使用的就那几个(逃~

原文出处:https://www.cnblogs.com/younShieh/p/10811456.html

相关文章
相关标签/搜索