WPF 在窗口的 Deactivated 使用 Mouse 的 Capture 将会让进程失去交互

当在WPF应用程序中,窗口Deactivated事件内使用Mouse.Capture方法,会导致整个进程的窗口失去鼠标交互。此问题表现为点击无效,直到切换到其他进程才恢复。排查此类问题时,应检查是否有在Deactivated事件中误调用Mouse.Capture。作者创建的博客分享更多相关知识,并邀请读者加入dotnet职业技术学院交流。
摘要由CSDN通过智能技术生成

如果在某个窗口的 Deactivated 事件里面,使用 Mouse.Capture 方法,让这个窗口重新捕获鼠标,那么将会让进程的所有窗口都失去鼠标交互,点击无效,只有在切换到其他进程的窗口之后,才能让窗口继续交互

实现这个坑的逻辑很简单,假定有两个窗口,分别是 MainWindow 和 Window1 两个窗口,在 Window1 的 Deactivated 事件里面,使用 Mouse.Capture 方法,让这个窗口重新捕获鼠标

        public Window1()
        {
            InitializeComponent();

            Deactivated += Window1_Deactivated;
        }

        private void Window1_Deactivated(object sender, EventArgs e)
        {
            Mouse.Capture(this);
        }

先点击 Window1 激活,然后点击 MainWindow 的空白,切换到 MainWindow 窗口。接着点击任何的窗口或窗口的按钮等,都没有响应

在 WPF 发现鼠标点击失效,或者触摸失效等时,可以全局搜一下 Mouse.Capture 方法,看是否在窗口的 Deactivated 事件里面调用

本来还想聊聊为什么这样做就会失去鼠标焦点的,然而 10 点多了

我搭建了自己的博客 https://blog.lindexi.com/ 欢迎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值