【WPF】鼠标拖拽功能DragOver和Drop
在Winform里面实现拖入功能只要设置控件AllowDrop=true;
然后实现方法
//拖入
private void txtInputPath_DragOver(object sender, DragEventArgs e)
{
e.Effects = DragDropEffects.Link;
}
//拖放结束
private void txtInputPath_Drop(object sender, DragEventArgs e)
{
string[] data = (string[])e.Data.GetData(DataFormats.FileDrop);
if (data == null || data.Length < || !data[].ToLower().EndsWith(".txt"))
return;
txtInputPath.Text = data[];
}
但是,再WPF里面用同样的方法就是不行,实现不了。经过百度后发现,不能使用DrapOver,改为PreviewDragOver就可以了。所以代码修改为:
/// <summary>
/// 拖入
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void txtInputPath_PreviewDragOver(object sender, DragEventArgs e)
{
e.Effects = DragDropEffects.Link;
e.Handled = true;//必须加
}
/// <summary>
/// 拖放结束
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void txtInputPath_PreviewDrop(object sender, DragEventArgs e)
{
string[] data = (string[])e.Data.GetData(DataFormats.FileDrop);
if (data == null || data.Length < || !data[].ToLower().EndsWith(".txt"))
return;
txtInputPath.Text = data[];
}
经过测试,确实就可以了。那么问题来了,为什么Winform里面可以,WPF里面不可以呢。查了下,可能是事件的机制及触发时间不一样吧。
以下是找到的一段翻译是这么说的:
Drag-and-drop操作过程中,会由一系列事件,DragSource包含的Event包括,GiveFeedback、QueryContinueDrag、PreviewGiveFeedback 和 PreviewQueryContinueDrag;DragTarget包含的Event包括:DragEnter[dragged object 进入这个target的边界时],DragLeave[dragged object 离开garget的边界之外],DragOver[dragged object 在target范围内移动],Drop[dragged object 被放置到target内],PreviewDragEnter,PreviewDragLeave,PreviewDragOver,PreviewDrop。
这些Event有两种模型,一个是Bubbling,一个是Tunnelling(带Preview前缀的)。
Bubbling的event是动作发生后触发;Tunnelling的event是动作发生前触发。
那么是不是可以这么理解DragOver里面代码是设置链接方式,但是触发时间点是发生后才触发这个事件,那么这个时候修改e.Effects = DragDropEffects.Link;可能为时已晚,所以要使用PreviewDragOver。不知道这样理解有没有错^_^。
【WPF】鼠标拖拽功能DragOver和Drop的更多相关文章
- WPF实现拖拽功能
技术点:WPF的Behaviors实现了对象的行为附加,Microsoft.Expression.Interactions程序集中包含了若干Behaviors,其中MouseDragElementBe ...
- WPF简单拖拽功能实现
1.拖放操作有两个方面:源和目标. 2.拖放操作通过以下三个步骤进行: ①用户单击元素,并保持鼠标键为按下状态,启动拖放操作. ②用户将鼠标移到其它元素上.如果该元素可接受正在拖动的内容的类型,鼠标指 ...
- Atitit。D&D drag&drop拖拽功能c#.net java swing的对比与实现总结
Atitit.D&D drag&drop拖拽功能c#.net java swing的对比与实现总结 1. 实现一个D&D操作一般包括三个步骤: 1 2. .net黑头的拖曳机制 ...
- Java3D读取3DMax模型并实现鼠标拖拽、旋转、滚轮缩放等功能
/**-------------------------------------------------代码区--------------------------------------------- ...
- RCP:拖拽功能的实现 Drag and Drop
SWT中的拖拽是使用的org.eclipse.swt.dnd. 有三个需要密切注意的类: 1.DragSource 2.DropTarget 3.Transfer DragSource封装了需要被拖拽 ...
- js进阶 12-17 jquery实现鼠标左键按下拖拽功能
js进阶 12-17 jquery实现鼠标左键按下拖拽功能 一.总结 一句话总结:监听的对象必须是文档,鼠标按下运行mousemove事件,鼠标松开取消mousemove事件的绑定,div的偏移的话是 ...
- WPF 在image控件用鼠标拖拽出矩形
原文:WPF 在image控件用鼠标拖拽出矩形 版权声明:博客已迁移到 http://lindexi.gitee.io 欢迎访问.如果当前博客图片看不到,请到 http://lindexi.gitee ...
- PCB Winform中的WebBrowser扩展拖放(拖拽)功能 实现方法
我们在Winform支持网页通常增加WebBrowser控件实现,相当于内嵌浏览器浏览网页使用, 而此WebBrowser默认情况是文件拖入功能是不支持的, 如何才能支持呢.在这里介绍如何实现方法 一 ...
- JQuery UI的拖拽功能
JQuery UI是JQuery官方支持的WebUI 代码库,包含底层交互.动画.特效等API,并且封装了一些Web小部件(Widget).同时,JQuery UI继承了jquery的插件支持,有大量 ...
随机推荐
- 自动化运维工具SaltStack详细部署
==========================================================================================一.基础介绍==== ...
- C图形库 Mingw g++ ege Windows下
今天闲来无事就想搞搞图形界面,本来是想弄openGL的但是配置有点麻烦,就觉得先弄个简单的图形库ege了. 1.下载头文件 地址:http://misaka.googlecode.com/files/ ...
- OpenCV中图像算术操作与逻辑操作
OpenCV中图像算术操作与逻辑操作 在图像处理中有两类最重要的基础操作各自是图像点操作与块操作.简单点说图像点操作就是图像每一个像素点的相关逻辑与几何运算.块操作最常见就是基于卷积算子的各种操作.实 ...
- 【Socket】linux广播技术
1.mystery引入 1)本学期学的ARP协议和NTP协议都属于广播技术的实现,所以借此机会了解下广播技术的底层原理 2)在IP地址中,如果最后一个数字为255,则一定是一个广播 ...
- Git修改已经提交的注释或日志
对于已经修改提交过的注释,如果需要修改,可以借助 git commit --amend 来进行.(注意:修改日志的功能在svn中需要server支持,在git中可以独立修改) 注意:必须是最近提交,还 ...
- (精品)微信支付android端
PayingActivity.java public void WxPay(){ // new Thread(new Runnable() { // @Override // public void ...
- Android学习笔记(38):Handler消息传递处理机制
先说为什么须要Handler: Android的主线程又叫UI线程,用于处理与UI相关的时间.Android仅仅同意在主线程中改动UI组件,当我们在其它线程中须要改动UI界面时.就须要发送消息到主线程 ...
- /.well-known/apple-app-site-association
Technical Q&A QA1919 Incoming requests for /.well-known/apple-app-site-association file Q: Why ...
- 【Unity Shader】一、顶点函数(vertex)和片元函数(fragment)
学习资料:http://www.sikiedu.com/course/37/task/430/show 学习Shader中顶点函数(vertex)和片元函数(fragment)的基本用法. Shade ...
- Spring高级装配(一) profile
Spring高级装配要学习的内容包括: Spring profile 条件化的bean声明 自动装配与歧义性 bean的作用域 Spring表达式语言 以上属于高级一点的bean装配技术,如果你没有啥 ...