【WPF】总结窗口和控件拖拽的实现

前文

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

关键词

Window, UserControls, drag, Thumb


参考资料

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

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


正文

1. 窗口的拖拽

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

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

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

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

    2. 利用SendMessage实现窗口拖动

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

2.控件的拖拽

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

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

 其它:1. Canvas容器中的子控件,通过点击下时记录的点,然后计算移动时的点的变化量,来重新计算子控件与父容器的相对位置。
参考学习这篇博文的2.3项

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

    3. 【推荐】Thumb控件

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

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

    4. 通过RenderTransform的TranslateTransform属性实现

参考博文 https://blog.csdn.net/qq_18995513/article/details/62889383

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


收工。

猜你喜欢

转载自www.cnblogs.com/younShieh/p/10797612.html