【发布时间】:2011-04-23 09:40:40
【问题描述】:
我的 WPF 应用程序中有一个列表框,当用户双击某个项目时,我会更改列表的内容(类似于目录导航)。在某些情况下,双击然后立即再次双击是有意义的,因为您知道在同一位置会出现什么。你会认为你可以通过快速连续点击四次来做到这一点(这应该意味着“两次双击”)。
但这不起作用。如果您单击足够快速,直到第五次或第六次单击 WPF 才会发送另一个双击事件!
看起来 WPF 内置了对三次单击的支持,如果单击速度足够快,有时甚至更多。我跑了一个简单的例子来确认这一点:
<ListBox PreviewMouseLeftButtonDown="ListBox_PreviewMouseLeftButtonDown"/>
private void ListBox_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Trace.WriteLine("ClickCount = " + e.ClickCount);
}
当我运行它并点击快速射击时,我得到如下输出:
ClickCount = 1
ClickCount = 2
ClickCount = 3
ClickCount = 1
ClickCount = 2
ClickCount = 3
ClickCount = 4
ClickCount = 1
ClickCount = 2
ClickCount = 3
有时它会数到 3 然后重新设置;有时它会在重置之前数到 4。我无法让它上升到 5。
但后来我进入控制面板 > 鼠标,并将我的双击速度更改为最慢的设置。然后我能够可靠地让它在重置之前数到 10,如果我真的预订它,最多可以数到 11 或 12。因此,显然这完全取决于您在系统配置的“双击”间隔之前可以单击多快。如果您在该间隔结束之前单击更多次,您将获得“三次单击”或“四次单击”或更多。
但我不想要三次点击或四次点击——尤其是在某些双击配置无法实现的情况下。我希望所有其他单击都是双击事件(只要它们快速连续,鼠标移动不超过阈值等)
当我点击快速触发时,有什么方法可以让 WPF 为我提供正常的双击事件(每隔一次点击的事件)?
【问题讨论】:
-
既然你已经成功统计了点击次数,何不在
ClickCount % 2 == 0时做任何你需要做的事情? -
@madd0,再看看我发布的输出。 ClickCount 不会继续增加。鉴于上面的示例输出,您将响应第 2 次、第 5 次、第 7 次和第 10 次点击。偶尔它会得到想要的行为,但只是偶然。
标签: wpf double-click