2010-06-05 84 views
1

我正在使用PreviewMouseDown,PreviewMouseMove和PreviewMouseUp處理TreeView中的拖放事件,但是存在一個問題。WPF TreeView使用預覽拖放

在我的PreviewMouseDown處理程序中,我設置了一切準備就緒,以防拖動開始(在Move事件中檢測到),但是我設置了e.Handled = true。這意味着標準選擇事件不會在我的樹上生成!

我希望能夠在我的Up事件中執行的操作是調用標準樹視圖選擇更改事件 - 除非我不能在樹外調用事件。那麼做到這一點的正確方法是什麼?

我試過使用標準的MouseDown,MouseMove和MouseUp事件,但是存在一個問題,搞亂了我的多選功能,這意味着我需要使用這些事件的預覽版本。

回答

1

我的解決方案是不使用預覽處理程序,而是使用MouseDown,MouseMove和MouseUp。

事件的順序是:

* MouseDown (set up for possible drag) 
* SelectionChanged (remember any selection change) 
* MouseMove (here we might go into a drag operation) 
* MouseUp (if we went into a drag operation, all done, otherwise process the multiple selection stuff) 
+0

SelectionChanged事件不會告訴你任何東西,如果你在同一個項目點擊兩次。這使得CTRL-點擊棘手,如果你想切換選擇相同的項目。 – imekon 2010-06-09 13:31:38

+0

你可以在這裏添加一些代碼來顯示它是如何工作的嗎?謝謝。 – Danield 2012-05-17 11:10:17