我有一个TreeView的AllowDrop属性设置为false,但仍然显示复制光标时拖动文件。我已经阅读了关于QueryContinueDrag事件的消息,但是这似乎只在将对象/表单/任何东西拖动时才会触发。当用户从应用程序外部(桌面,电子邮件附件等)接收文件并将其带入TreeView时,我想要取消拖动操作,即将光标恢复到正常并放弃文件。有什么方法可以做到这一点?从我所知道的情况来看,QueryContinueDrag是Arg的唯一事件,它允许我将DragAction设置为“取消”,并且在引入外部文件时不会触发。我也考虑强制“esc”按键或鼠标右键单击,但我不想使用PIvoke。如何以编程方式取消在WPF应用程序之外开始的拖动操作?
0
A
回答
1
@elgonzo是正确的,它是不是你的责任,取消你没有开始的拖放操作。你只需要关心你是否打算允许数据被删除,如果它被尝试。通过它的声音,你不会,所以他们将无法删除数据。
如果你真的关心光标,那么你可以使用这个改变,从像PrevieMouseMove
或PreviewDragOver
事件几个事件处理程序:
Mouse.SetCursor(Cursors.No);
为了您的信息,虽然,你可以设置DragEventArgs.Effects
属性到DragDropEffects.None
它会自动为你设置光标。从MSDN上的DragEventArgs.Effects
Property页面:
默认情况下,此属性中指定的效果决定了拖放操作目标的鼠标光标。这对于在相应的对象被删除时将发生的操作向用户提供反馈很有用。
PreviewDragOver
,DragOver
,PreviewDrop
,Drop
,PreviewDragEnter
,DragEnter
,PreviewDragLeave
,DragLeave
因此,所有你需要做的是:
您可以从以下任一事件的访问DragEventArgs
对象通过在其中一个处理程序中将DragEventArgs.Effects
属性设置为DragDropEffects.None
,可以显示无法删除数据。我会推荐一个连续的例如PrevieMouseMove
或PreviewDragOver
。
1
你可以写:
if (condition) {
`e.Handled = true;
((Thumb)e.OriginalSource).CancelDrag();
return;
}
相关问题
- 1. Snap.svg:如何以编程方式取消正在进行的拖动操作?
- 2. 如何以编程方式调用jQuery UI Draggable拖动开始?
- 3. WPF取消拖动操作
- 4. 如何以编程方式取消Java/Swing中的拖放操作?
- 5. 如何以编程方式中止jQuery拖动操作?
- 6. 以编程方式从wpf应用程序打开winform
- 7. 在开始之前取消拖动
- 8. 如何以编程方式退出QListWidget中的拖放操作?
- 9. Android - 以编程方式打开消息应用程序
- 10. WPF CodedUI测试:以编程方式启动应用程序
- 11. 以编程方式开始拖动JSlider Thumb
- 12. Oracle应用程序 - 以编程方式操作表单数据
- 13. 如何以编程方式设置项目的“开始外部程序”设置?
- 14. 以编程方式取消默认应用程序
- 15. Android Drag-Sort-Listview - 以编程方式启动拖放操作
- 16. 如何以编程方式打开状态栏应用程序?
- 17. 如何以编程方式获取应用程序的版本
- 18. 如何以编程方式获取应用程序的名称?
- 19. 以编程方式将应用程序作为应用程序打开
- 20. 如何以编程方式从单元测试启动WPF应用程序?
- 21. 开始使用UICollectionViewController以编程方式
- 22. 如何以编程方式获取用户启动的应用程序?
- 23. 以编程方式调整WPF应用程序的主窗口
- 24. 如何以编程方式启动挂架Web应用程序?
- 25. 如何以编程方式启动Facebook应用程序?
- 26. 如何以编程方式启动应用程序?
- 27. 如何以编程方式启动JNLP应用程序?
- 28. 如何在Mac应用程序中取消拖动
- 29. 如果另一个应用程序打开,如何以编程方式启动我的应用程序?
- 30. 如何在应用程序进入前景时开始操作
如果我想拖放从我的屏幕左侧东西,我的屏幕的右边,我只是移动鼠标越过你的应用程序的窗口(您应用恰好碰巧坐在...)。我想继续拖动(从而再次离开你的窗口),直到我到达我的屏幕右侧的目的地。你有没有想过如果你的应用程序开始搞乱它应该不被关注的操作,我会反应如何? – elgonzo