【问题标题】:getting system's double click timer interval in WPF (value from control panel)在 WPF 中获取系统的双击计时器间隔(来自控制面板的值)
【发布时间】:2011-06-16 15:39:54
【问题描述】:

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

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

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

【问题讨论】:

    标签: wpf mouse double-click controlpanel


    【解决方案1】:

    你可以在这里找到时间:System.Windows.Forms.SystemInformation.DoubleClickTime

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

    WPF: Button single click + double click issue

    【讨论】:

    • 不错,但最好使用 SystemInformation.DoubleClickTime 并避免 WPF 中的 winforms 引用
    • 您指的是哪个 SystemInformation 类?它的命名空间是什么?
    • @Muad'Dib 看起来 SystemInformation 是 winforms 的一部分
    • @Shezan Baig 我在想 SystemParamaters 类,它不是 winforms 的一部分。原来,那里没有双击信息。我已经将它用于拖放鼠标移动阈值之类的事情。
    • 为了避免对 Winforms 的引用,你可以在幕后做同样的事情,并在 user32.dll 中导入 GetDoubleClickTime 函数:[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]public static extern int GetDoubleClickTime();
    【解决方案2】:

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

        [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
        public static extern int GetDoubleClickTime();
    

    【讨论】:

      【解决方案3】:

      【讨论】:

        【解决方案4】:

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

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

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

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

        【讨论】:

          猜你喜欢
          • 2010-11-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-26
          相关资源
          最近更新 更多