TreeViewItem:如何在单击而不是MouseDown上进行选择更改?

gst*_*ken 5 wpf treeview drag-and-drop selection

背景:我正在从TreeView中实现“拖放”。要求是拖动某一项应该不会改变选择-只有完成后,单击(上的MouseUp同一项目),应选择该项目。

但是,TreeView的默认行为是在MouseDown上引发SelectedItemChanged事件。关于如何改变的任何想法?

谢谢!

编辑:我忘了提到一个重要的观点-我很抱歉。我将Gong拖放框架用于所有拖放操作,因为它与MVVM很好地融合了(我的视图中不需要任何代码隐藏)。拖放逻辑是通过Views的XAML中的附加属性完全在ViewModels中处理的。

因此,PreviewMouseDown本人涉及并处理所有选择和拖动逻辑的解决方案将适得其反。因此,我只是在寻找一种(简单的)方法来防止TreeView控件在鼠标按下时更改选择,同时仍然引发诸如等的常见冒泡事件MouseDownMouseMove以使拖放库按设计工作。

我的下一个想法是自己修改Gong拖放库代码-我只是希望可以避免这种情况,并且有人会想出一种简单的方法来更改TreeView在这方面的行为。

H.B*_*.B. 0

您可以使用类似 的隧道事件,这些事件将在事件到达控件内部之前进行处理,因此您可以通过设置来拦截它们。将此事件与和的隧道版本结合使用,以实现一些自定义拖动和选择逻辑。PreviewMouseDownTreeViewItemse.Handled = trueMouseMoveMouseUp

如果没有拖动,您可能需要拦截所有事件并手动选择,但也许您可以找到更好或更优雅的东西。我希望这可以帮助您完成这项工作。