2010-06-05 83 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