背景:我正在从TreeView实现Drag& Drop。要求是拖动项目应该不更改选择 - 只有完整的点击(同一项目上的MouseUp)应该选择该项目。
但是,TreeView的默认行为是在MouseDown上引发SelectedItemChanged事件。关于如何改变它的任何想法?
谢谢!
编辑:我忘了提一个重点 - 道歉。我使用Gong drag&drop framework进行所有拖放操作,因为它与MVVM完美融合(我的视图中不需要代码隐藏)。拖放逻辑完全在ViewModels中通过Views的XAML中的附加属性进行处理。因此,涉及PreviewMouseDown
并自行处理所有选择和拖动逻辑的解决方案会适得其反。因此,我只是在寻找一种(简单)方法来阻止TreeView控件在鼠标按下时更改选择,同时仍然会引发常见的冒泡事件,如MouseDown
,MouseMove
等等。拖放库以按设计工作。
我的下一个想法是自己修改Gong拖放库代码 - 我只是希望我可以避免这种情况,有人会想出一个简单的方法来改变TreeView在这方面的行为。
答案 0 :(得分:0)
您可以在PreviewMouseDown
上使用TreeViewItems
e.Handled = true
,这些将在事件到达控件内部之前处理,因此您可以通过设置{{1}来拦截它们}}。将此事件与MouseMove
和MouseUp
的隧道版本结合使用,以实现一些自定义拖动和选择逻辑。
您可能需要拦截所有事件并在没有阻力的情况下手动选择,但也许您可以找到更好或更优雅的东西。我希望这可以帮助你完成这项工作。