WPF:按钮单击+双击问题

2024-06-05

我必须处理 WPF 应用程序中按钮的单击和双击,并具有不同的反应。 不幸的是,在双击时,WPF 会触发两个单击事件和一个双击事件,因此很难处理这种情况。

它试图使用计时器来解决它,但没有成功......我希望你能帮助我。

我们看一下代码:

private void delayedBtnClick(object statInfo)
{
    if (doubleClickTimer != null)
        doubleClickTimer.Dispose();
    doubleClickTimer = null;

    this.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new VoidDelegate(delegate()
    {
        // ... DO THE SINGLE CLICK ACTION
    }));
}

private void btn_Click(object sender, RoutedEventArgs e)
{
    if (doubleClickTimer == null)
        doubleClickTimer = new Timer(delayedBtnClick, null, System.Windows.Forms.SystemInformation.DoubleClickTime, Timeout.Infinite);
        }
    }
}

private void btnNext_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    if (doubleClickTimer != null)
        doubleClickTimer.Change(Timeout.Infinite, Timeout.Infinite);    // disable it - I've tried it with and without this line
        doubleClickTimer.Dispose();
    doubleClickTimer = null;

    //.... DO THE DOUBLE CLICK ACTION
}

问题在于,双击时在“双击操作”之后调用“单击操作”。奇怪的是我设置了doubleClickTimer双击为 null 但在delayedBtnClick这是真的:O

我已经尝试过使用更长的时间、布尔标志和锁......

你有什么想法?

Best!


如果您设置RoutedEvent's e.Handled to true处理后MouseDoubleClick事件然后它不会调用Click事件发生后的第二次MouseDoubleClick.

有一个最近贴文 https://stackoverflow.com/questions/970898/double-click-vs-single-click-are-these-mutually-exclusive这涉及到有不同的行为SingleClick and DoubleClick这可能有用。

但是,如果您确定想要单独的行为并且想要/需要阻止第一个行为Click以及第二个Click,您可以使用DispatcherTimer就像你一样。

private static DispatcherTimer myClickWaitTimer = 
    new DispatcherTimer(
        new TimeSpan(0, 0, 0, 1), 
        DispatcherPriority.Background, 
        mouseWaitTimer_Tick, 
        Dispatcher.CurrentDispatcher);

private void Button_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    // Stop the timer from ticking.
    myClickWaitTimer.Stop();

    Trace.WriteLine("Double Click");
    e.Handled = true;
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    myClickWaitTimer.Start();
}

private static void mouseWaitTimer_Tick(object sender, EventArgs e)
{
    myClickWaitTimer.Stop();

    // Handle Single Click Actions
    Trace.WriteLine("Single Click");
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF:按钮单击+双击问题 的相关文章

随机推荐

  • 过滤器返回 true 或 false

    我正在使用过滤器在 data it 返回对象中查找 id 它返回的对象不是 true 或 false 如果我怎样才能返回 true 或 falseval recoredId valueId var hasMatch data filter
  • ATL创建的COM接口继承IDispatch但后期绑定不起作用

    这是我的 IDL 文件 IFrame 是一个双接口 同时继承了 IDispatch 和 IUnknown object uuid C5AD0517 37FC 479C 9C7A A063B17E4A2E dual nonextensible
  • GIT Rebase 协作的分支?

    阅读本文后 重新设置基点以收集从主分支到我的功能分支的更改是有意义的 Git 工作流程以及 rebase 与合并问题 https stackoverflow com questions 457927 git workflow and reb
  • RequireJS 不遵循设置了 baseUrl 的 data-main 的相对路径

    使用 requireJS 我尝试为我的数据主指定一个与 baseUrl 不同的路径 看来 requireJS 会忽略我在文件名之前输入的任何内容 并始终在 baseUrl 文件夹中查找该文件 我有以下文件夹结构 index html scr
  • YouTube 视频 ID 完成后如何让 fancybox 自动关闭?

    当 youtube 视频结束时 如何让 fancybox 自动关闭 这并不像听起来那么简单 首先确定您是否要使用嵌入播放器或 iframe 播放器 跟着嵌入播放器API http code google com apis youtube j
  • caffe安装:opencv libpng16.so.16链接问题

    我正在尝试在 Ubuntu 14 04 机器上使用 python 接口编译 caffe 我已经安装了 Anaconda 和 opencvconda install opencv 我还安装了咖啡中规定的所有要求 并更改了注释块makefile
  • 创建 xyz 海拔数据的曲面图

    我正在尝试用 python 创建一座山的表面图 其中我有一些 xyz 数据 最终结果应该类似于that https i stack imgur com rKQV0 png 该文件的格式如下 616000 0 90500 0 3096 712
  • 获取文本文件中行的字节偏移量?

    我有一个文本文件 例如 one two three four five 我需要获取文件中每一行的偏移量 我如何在 Java 中做到这一点 我搜索了一些 I O 库 如 BufferedReader 和 RandomAccessFile 但我
  • 二元运算符“&=”不能应用于 Swift 中的两个“Bool”操作数

    我正在尝试进行多次检查 将结果累积在Bool 我的代码是 var validParams login characters count gt 4 validParams password characters count gt 6 vali
  • 在 MVC 3 中,我无法让 @Html.DisplayFor 呈现格式化字符串

    我希望这是一个非常简单的问题 尽管经过大量谷歌搜索后 我还没有能够解决这个问题 我正在使用 MVC 3 开发一个购物车网站 并使用代码优先的实体框架 我发送的模型是 Product 对象的列表 每个对象都包含此属性 Required Err
  • 如何让 iPhone 发出蜂鸣声?

    什么代码可以让我在 iPhone 上发出标准的蜂鸣声 好吧 这取决于您想要什么样的声音 以下是如何使用 AVFoundation 音频框架播放声音 import
  • Azure 函数输入绑定:哪个 NuGet 包用于“表”属性?

    我正在使用 HttpTrigger 创建一个新的 azure 函数 我想实现一个天蓝色的表存储表作为输入绑定 按照 msdn 中的源代码示例 我无法弄清楚在哪个 NuGet 包中可以找到 Table 属性 编译问题 找不到类型或命名空间 T
  • 如何更改Linux服务器中的MySQL表名不区分大小写?

    我正在开发一个旧网站 该网站曾经托管在 Apple 服务器上 当它迁移到新的 Linux 服务器时 它停止工作 我很确定这是因为 php 脚本中使用的所有 MySQL 查询对于表名都有不同的大小写组合 我不知道为什么原始开发人员在创建表名或
  • Filezilla FTP 服务器无法检索目录列表

    我正在运行 Filezilla Server 0 9 45 beta 来远程管理我的服务器 设置好后 我测试了使用IP连接到它127 0 0 1 并且运行成功 但是 为了远程连接到服务器 我将端口转发到端口 21 并尝试使用我的计算机的 I
  • Android:NotificationCompat.MediaStyle 操作按钮不执行任何操作

    我有一个简单的 Android 应用程序 其中包含一个Activity and a Service源自于MediaBrowserServiceCompat 我已成功将其设置为通过使用播放我的主要活动中的音频MediaBrowserCompa
  • 有没有办法在 (g)Vim 中突出显示多个搜索?

    我想在 Vim gVim 中搜索多个字符串 并用不同的颜色突出显示它们 有没有办法用开箱即用的 Vim 或插件来做到这一点 在 vim 编辑器中突出显示多个单词有两种简单的方法 进入搜索模式 即输入 然后输入 v后面是您要搜索的单词 以 分
  • 找到第一个命中后停止 DIR 命令搜索

    在 CMD EXE 中我可以使用以下命令搜索某些内容DIR 以下面的例子为例 DIR C EXCEL EXE A D B S 虽然需要一段时间才能看清C 盘的整个结构 但是第一次匹配还是比较快的 Q 有没有办法自动地一旦发现命中 就停止命令
  • 无法使用安装了启用的 Hyper-V 和 WSL2 的 VirtualBox 启动 Windows 10 客户机 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我最近将 Windows 10 版本更新为2004 我还将 WSL 更新为 WSL2 我在尝试通过 VirtualBox 使用虚拟机 Wi
  • 如何获取flex和bison中token的字符串值?

    我的 lex 文件中有此令牌 a zA Z0 9 yylval yytext return ALPHANUM 我的 y 文件中的代码 Sentence Sphere ALPHANUM FILE file fopen C test txt a
  • WPF:按钮单击+双击问题

    我必须处理 WPF 应用程序中按钮的单击和双击 并具有不同的反应 不幸的是 在双击时 WPF 会触发两个单击事件和一个双击事件 因此很难处理这种情况 它试图使用计时器来解决它 但没有成功 我希望你能帮助我 我们看一下代码 private v