wpf - TreeView 项 : How to make selection change occur on Click instead of MouseDown?

标签 wpf drag-and-drop treeview selection

背景:我正在从 TreeView 实现拖放。要求是拖动项目不应更改选择 - 只有完整的单击(同一项目上的鼠标向上)才能选择该项目。

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

谢谢!

编辑:我忘了提到一个重要的点 - 我的歉意。我正在使用 Gong drag&drop framework对于所有拖放操作,因为它与 MVVM 很好地融合(在我的 View 中不需要隐藏代码)。拖放逻辑完全在 ViewModel 中处理,通过 Views 的 XAML 中的附加属性。

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

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

最佳答案

您可以使用 tunneling events喜欢 PreviewMouseDownTreeViewItems ,这些将在事件到达控件内部之前处理,因此您可以通过设置 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/

相关文章:

C# WPF 工具包图表 : Bind with 16k points speed

c# - 后台工作人员报告忙碌,尽管已被取消且不再存在

wpf - 无法解析 StaticExtension 值

javascript - 如何在 Bootstrap TreeView 中按ID选择节点?

c# - 在DataGrid wpf中更改组合框的选定值

Javascript - 从 ArrayBuffer 中获取数据?

c++ - Qt 拖放 TreeView : what am I missing

c++ - COleDataSource/COleDropTarget 取消拖放操作

vb.net - 动态 TreeView 高度

delphi - 基于TreeView创建自己的组件(TTreeNode问题)