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

时间:2011-10-21 18:35:12

标签: wpf drag-and-drop treeview selection

背景:我正在从TreeView实现Drag& Drop。要求是拖动项目应该更改选择 - 只有完整的点击(同一项目上的MouseUp)应该选择该项目。

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

谢谢!

编辑:我忘了提一个重点 - 道歉。我使用Gong drag&drop framework进行所有拖放操作,因为它与MVVM完美融合(我的视图中不需要代码隐藏)。拖放逻辑完全在ViewModels中通过Views的XAML中的附加属性进行处理。

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

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

1 个答案:

答案 0 :(得分:0)

您可以在PreviewMouseDown上使用TreeViewItems e.Handled = true,这些将在事件到达控件内部之前处理,因此您可以通过设置{{1}来拦截它们}}。将此事件与MouseMoveMouseUp的隧道版本结合使用,以实现一些自定义拖动和选择逻辑。

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