6

我有一个 FrameworkElement,我想在用户单击时执行操作 A,在用户双击时执行操作 B。

由于事件的传递方式,我总是得到一个单击事件,它开始动作 A。环顾四周后,我在这里发现了一种有趣的技术,它使用计时器来延迟对点击的处理。但是,此示例将计时器硬编码为 300 毫秒,但我更喜欢使用用户的“双击速度”设置控制面板的鼠标属性对话框。

从系统中获取该值的 wpf/C# API 是什么?

4

4 回答 4

10

您可以在此处找到时间:System.Windows.Forms.SystemInformation.DoubleClickTime

您实际上可以在这里看到您想要实现的目标的完整实现:

WPF:按钮单击+双击问题

于 2011-01-27T15:54:59.380 回答
5

如果你不想引用 System.Windows.Forms 程序集,你可以试试这个:

    [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
    public static extern int GetDoubleClickTime();
于 2017-08-26T02:48:28.213 回答
4

这应该工作SystemInformation.DoubleClickTime

于 2011-01-27T15:56:33.583 回答
0

我有一个 FrameworkElement,我想在用户单击时执行操作 A,在用户双击时执行操作 B。

如果您正在处理一个提供 的事件MouseButtonEventArgs,例如UIElement.MouseLeftButtonDown,您可以访问MouseButtonEventArgs.ClickCount以确定在彼此的双击时间内是否发生了多次单击。由于在您的情况下应该可以FrameworkElement从中派生。UIElement

无需使用 DllImport 或 WinForms,因为您实际上不需要知道完成主要目标的双击时间。

编辑添加:我发现这仅适用于 ButtonDown 事件(左或右)。我不确定为什么他们没有为 ButtonUp 事件正确实现这一点,但它应该足以捕获这两个事件,并从 ButtonDown 中保留一个 ClickCount 的成员变量,您可以在接收 ButtonUp 时检查它。

于 2018-03-21T21:23:22.480 回答