WPF响应长按事件

原文: WPF响应长按事件

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.youkuaiyun.com/lwwl12/article/details/78983140
思路:MouseDown 时启动一个线程并标记IsMouseDown=True,若MouseUp则修改标记IsMouseDown=False,线程内Sleep 1500ms之后判断IsMouseDown=True则开始响应事件
bool IsLeftMouseDown = false;  
private void DataGrid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)  
{  
    IsLeftMouseDown = true;  
    Thread th = new Thread(new ThreadStart(() =>  
    {  
        Thread.Sleep(1500);  
  
        if (IsLeftMouseDown)  
        {  
            MessageBox.Show("长按了1.5秒");  
            IsLeftMouseDown = false;  
        }  
        else  
        {  
            MessageBox.Show("1.5秒内释放了点击");  
        }  
    }));  
    th.Start();  
}  
  
private void DataGrid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)  
{  
    IsLeftMouseDown = false;  
}  

以上的实现可以解决问题,但是有bug,以下提供更优的解决方案:

        bool IsLeftMouseDown = false;

        bool EntryTouch = false;

        Thread th = null;
        private void DataGrid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            IsLeftMouseDown = true;

            if (th != null)
            {
                if (th.ThreadState == ThreadState.Running || th.ThreadState == ThreadState.WaitSleepJoin)
                    th.Abort();
            }
            th = new Thread(new ThreadStart(() =>
            {
                Thread.Sleep(1500);

                if (IsLeftMouseDown)
                {
                    EntryTouch = true;

                    MessageBox.Show("长按了1.5秒");
                    IsLeftMouseDown = false;
                }
                else
                {
                    MessageBox.Show("1.5秒内释放了点击");
                }

                EntryTouch = false;

            }));
            th.Start();
        }

        private void DataGrid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            if(EntryTouch)
            {
                MessageBox.Show("已进入长按事件");
            }

            IsLeftMouseDown = false;
        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值