我有一個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