背景:我正在从 TreeView 实现拖放。要求是拖动项目不应更改选择 - 只有完整的单击(同一项目上的鼠标向上)才能选择该项目。
但是,TreeView 的默认行为是在 MouseDown 上引发 SelectedItemChanged 事件。关于如何改变它的任何想法?
谢谢!
编辑:我忘了提到一个重要的点 - 我的歉意。我正在使用 Gong drag&drop framework对于所有拖放操作,因为它与 MVVM 很好地融合(在我的 View 中不需要隐藏代码)。拖放逻辑完全在 ViewModel 中处理,通过 Views 的 XAML 中的附加属性。
因此,解决方案涉及PreviewMouseDown
并且自己处理所有的选择和拖动逻辑会适得其反。所以我只是在寻找一种(简单的)方法来防止 TreeView 控件在鼠标按下时更改选择,同时仍然引发通常的冒泡事件,如 MouseDown
, MouseMove
等等,以便拖放库按设计工作。
我的下一个想法是自己修改龚拖放库代码 - 我只是希望我可以避免这种情况,有人会想出一种简单的方法来改变 TreeView 在这方面的行为。
最佳答案
您可以使用 tunneling events喜欢 PreviewMouseDown
在 TreeViewItems
,这些将在事件到达控件内部之前处理,因此您可以通过设置 e.Handled = true
来拦截它们。 .将此事件与 MouseMove
的隧道版本结合使用和 MouseUp
实现一些自定义的拖动和选择逻辑。
如果没有拖动,您可能需要拦截所有事件并手动选择,但也许您可以找到更好或更优雅的方法。我希望这可以帮助您完成这项工作。
关于wpf - TreeView 项 : How to make selection change occur on Click instead of MouseDown?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7853759/