我的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。
然后我进入控制面板&gt;鼠标,并将我的双击速度更改为最慢的设置。然后我可以在重置之前可靠地计算到10,如果我真的预订它,最多可以达到11或12。显然,所有这些都是关于在系统配置的“双击”间隔之前可以多快地点击。如果在该间隔过去之前单击更多次,则会出现“三击”或“四击”或更多次。
但我想要三次点击或四次点击 - 尤其是如果某些双击配置无法获得它们。我希望每次点击都是双击事件(只要它们快速连续,鼠标的移动速度不超过阈值数量等)。
当我点击快速射击时,有什么方法可以让WPF给我正常的双击事件(每次其他点击的事件)?
答案 0 :(得分:1)
使用几个实例变量:_LastMouseDownTime和_LastMouseDownWasDoubleClick:
private int _LastMouseDownTime;
private bool _LastMouseDownWasDoubleClick;
private void ListBox_PreviewMouseDown(object sender, MouseButtonEventArgs e) {
if(e.Timestamp - _LastMouseDownTime <= System.Windows.Forms.SystemInformation.DoubleClickTime && !_LastMouseDownWasDoubleClick) {
Debug.Print("DoubleClick - StupidWorthlessClickCount:{0}", e.ClickCount);
_LastMouseDownWasDoubleClick = true;
//Do some double clicking goodness
} else {
Debug.Print("FirstClick - StupidWorthlessClickCount:{0}", e.ClickCount);
_LastMouseDownWasDoubleClick = false;
//Do some single clicking goodness
}
_LastMouseDownTime = e.Timestamp;
base.OnMouseDown(e);
}
我知道这是超级hacky而且不是很灵活,但它应该能满足你的需求。我正在尝试让WPF RichTextBox响应那些第4,第5等点击,比如它们是第1,第2等,以使选择工作更自然,但这可能被证明是不可能的! :)
希望这有帮助。
答案 1 :(得分:0)
ClickCount
显示用户在系统双击时间内点击了多少次。因此,如果您只需要双击即可回复:
private void ListBox_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (e.ClickCount % 2 == 1)
return;
Trace.WriteLine(e.ClickCount + " " + DateTime.Now);
}
输出:
//2 clicks:
2 10.03.2011 16:05:17
//4 clicks:
2 10.03.2011 16:05:20
4 10.03.2011 16:05:20
//3 clicks:
2 10.03.2011 16:05:26