【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的插件支持,有大量 ...
随机推荐
- 数据库存储引擎 show engines 修改引擎
mysql> show engines; +--------------------+---------+-------------------------------------------- ...
- 行为类模式(九):策略(Strategy)
定义 针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. UML 优点 策略模式提供了管理相关的算法族的办法.策 ...
- Android 自定义Dialog 去除阴影
自定义Dialog中添加下列代码: window.clearFlags( WindowManager.LayoutParams.FLAG_DIM_BEHIND);
- lua -- 事件响应与局部变量
-- 这里要注意的点是:虽然nAmount是局部变量,却在控件的响应函数中使用 -- 因为控件的响应函数是在该变量的区域内,所以可以用 -- 如果控件的响应函数在外部,那么该变量就要声明成为全局变量 ...
- java park unpark
https://blogs.oracle.com/dave/a-race-in-locksupport-park-arising-from-weak-memory-models https://blo ...
- angular学习笔记(三十)-指令(7)-compile和link(2)
继续上一篇:angular学习笔记(三十)-指令(7)-compile和link(1) 上一篇讲了compile函数的基本概念,接下来详细讲解compile和link的执行顺序. 看一段三个指令嵌套的 ...
- 每日英语:The Invasion of the Online Tutors
It's a nightly dilemma in many households: A student hits a wall doing homework, and parents are too ...
- 每日英语:Teens Are Still Developing Empathy Skills
The teen years are often fraught with door-slamming, eye-rolling and seeming insensitivity, even by ...
- Spark SQL inferSchema实现原理探微(Python)【转】
使用Spark SQL的基础是“注册”(Register)若干表,表的一个重要组成部分就是模式,Spark SQL提供两种选项供用户选择: (1)applySchema applySche ...
- 命令生成和运行android项目
转自:http://wiki.dourok.info/doku.php/%E7%BC%96%E7%A0%81/android/%E5%91%BD%E4%BB%A4%E8%A1%8C%E7%94%9F% ...