【问题标题】:Ignore Single Click in WPF忽略 WPF 中的单击
【发布时间】:2010-11-12 04:38:36
【问题描述】:

我有一个用户控件,我想在单击和双击的情况下做一些不同的事情。我正在处理 mouseLeftButtonDown 事件:

 private void cueCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        switch (e.ClickCount)
        {
            case 1:
                {
                    cueCanvas.Focus();
                    e.Handled = true;
                    _mouseStartPoint = Mouse.GetPosition(null);
                    break;
                }
            case 2:
                {
                    double pos = Mouse.GetPosition(cueCanvas).X;
                    TimeSpan time = ConvertFromPosition(pos);
                    AddNewEvent(time);
                    e.Handled = true;
                    break;
                }
        }
    }

问题在于 WPF 并不真正关心您单击了多少次鼠标,因此即使我即将获得第二个单击事件(在双击的情况下),我也会得到第一个单击事件.有没有人想出解决这个问题的方法?我意识到我可以尝试变得聪明并设置一些计时器,以便在第二次点击进入的情况下“取消”第一次点击(我意识到这是框架无论如何都会做的事情)。如果这是唯一的答案,有谁知道我们如何查询系统以获得适当的点击延迟?

【问题讨论】:

    标签: c# wpf user-controls mouse click


    【解决方案1】:

    据我所知,确实没有办法做到这一点。问题是你在与现实作斗争。 :-) 实际上,双击有 2 次点击。如果快速接着双击,您希望忽略单击。

    您需要稍等片刻,看看是否有第二次点击。您可以使用 WinForms 中的 SystemInformation 类查询该间隔,或者直接调用 Win32 API

    【讨论】:

    • 好吧,我想说这并非没有先例。尝试在 windows 文件管理器中双击一个文件,看看它是否也每次都重命名它。
    • 但是感谢 SystemInformation 提示。这实际上是我最终使用的。如果没有人有更好的想法,我会发布代码......
    • 哦,是的,这是某些人需要的场景,毫无疑问,它具有优先权。我只是说,这有点与系统作斗争——你必须等待一两秒钟才能确认没有双击。您会注意到 Windows 资源管理器在重命名文件之前会等待片刻。无论如何,祝你好运。
    • 我同意,这不是很好。谢谢。
    猜你喜欢
    • 2010-10-07
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 2012-06-26
    相关资源
    最近更新 更多