2010-06-08 81 views
2

我正在构建一个特殊的列表框控件,我们的设计师需要通过一些微妙的方式进行定制。WPF:如何使正常的listbox左键选择行为使用中鼠标呢?

他们希望看到的一件事是,中间的按钮拖动做左侧按钮拖动通常会做的事情(我们正在将左拖放到其他东西)。

所以它需要的是左键拖拽确实在ListBox默认实现了两个关键特征:

  1. 按住左键并拖动,选择开始,我点击向下延伸到哪里我拖累。
  2. 在列表框区域外面拖动时,如果在该方向上存在可滚动空间,则它会滚动。

在我手工复制这个功能之前,有没有什么简单的方法来愚弄ListBox,让它认为它是获取左鼠标拖动事件,而是获得中鼠标?

回答

0

MouseDown会帮助你。它监测所有的老鼠。这里有一篇很好的文章。 http://blogs.msdn.com/b/nickkramer/archive/2005/06/13/428754.aspx

从文章:

我们的MouseLeftButtonDown和 的MouseRightButtonDown事件,但没有 MouseMiddleButtonDown事件。您可以使用 附加事件Mouse.MouseDown获取中间按钮,其中 侦听所有鼠标按钮,并且 检查args.ChangedButton == MouseButton.Middle。

+0

哦,让我补充一点,没有出炉的方式来使用鼠标中键。 – 2010-06-08 23:09:31

+0

我的问题不是关于如何获取中鼠标事件,而是关于如何重新映射捕获的鼠标中间事件到可以传递给列表框的左鼠标事件。 – scobi 2010-06-09 16:56:47

+0

列表框不会自动实现拖放,所以我不确定你在问什么。 WPF为你提供了一个框架来连接拖放,但是没有属性可以打开,或者你只是挂钩的事件会自动处理拖动。您仍然需要捕获mousedown,或者更确切地说是PreviewMouseDown。无论您要为左按钮输入什么代码,都可以到那里并使用事件参数来确定它是被捕获的中间按钮。 下面是如何做到这一点:http://diptimayapatra.wordpress.com/2010/01/16/drag-and-drop-item-in-listbox-in-wpf/ – 2010-06-09 18:14:17

相关问题