求助,WPF如何实现控件的拖动与复制
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求助,WPF如何实现控件的拖动与复制相关的知识,希望对你有一定的参考价值。
参考技术A 想实现这样一个常用功能:在ListBox的一个Item上点住左键,然后拖拽到另外一个控件(如ListView中),松开左键,数据已经拖拽过来。步骤如下:
1. 设置ListBox 的AllowDrop属性为True
2. 在ListBoxItem 的Style中设置EventSetter
<Style x:Key="MyListBoxItemStyle" TargetType="x:Type ListBoxItem">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListBoxItem_PreviewMouseLeftButtonDown"/>
</Style>
3. 实现ListBoxItem_PreviewMouseLeftButtonDown
private void ListBoxItem_PreviewMouseLeftButtonDown(object sender, MouseEventArgs e)
ListBoxItem item = (sender as Control) as ListBoxItem;
if (item != null )
DataObject dataObject = new DataObject(item.DataContext);
DragDrop.DoDragDrop(item, dataObject, DragDropEffects.Copy);//启动拖拽
4. 在目的控件也将AllowDrop的属性设为True,然后实现目的控件的Drop Event
private void ***Control_Drop(object sender, DragEventArgs e)
// 注册Drop事件用来接收数据。
IDataObject data = new DataObject();
data = e.Data;
object obj = data.GetData(typeof(YourDataContext));
if (obj != null)
Do your job
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 坐标系统内平移(移动)对象。
收工。
以上是关于求助,WPF如何实现控件的拖动与复制的主要内容,如果未能解决你的问题,请参考以下文章
请问下WPF的slider样式要如何才能改成下面这样。。。求助下。。。还是说使用其他控件才能做出这种。。。