CaptureMouse/CaptureStylus 可能会失败
来源:互联网 发布:企业淘宝开店流程步骤 编辑:程序博客网 时间:2024/06/11 12:39
在 WPF 中,如果我们要做拖动效果,通常会调用一下 CaptureMouse
/CaptureStylus
以便当鼠标或手指离开控件的时候依然能够响应 Move
和 Up
事件。不知有没有注意到这两个函数其实是有 bool
返回值的?——是的,它们可能会失败。
在调试一个项目代码的时候,我就发现了这种失败,观察返回值确实是 false
,然而为什么呢?
查看 .Net Framework 的源码 我们发现,CaptureMouse
最终调到了 Mouse.Capture
方法:
public static bool Capture(IInputElement element){ return Mouse.PrimaryDevice.Capture(element);}
然后一步步调到了 bool Capture(IInputElement element, CaptureMode captureMode)
,而其中对是否可 Capture
的关键性影响代码就在这个方法内部。为了便于理解,我把他改成了下面这样,是等价的:
[Pure]private static bool CanCapture(IInputElement element){ if (element is UIElement e) { return e.IsVisible && e.IsEnabled; } if (element is ContentElement ce) { return ce.IsEnabled; } if (element is UIElement3D e3D) { return e3D.IsVisible && e3D.IsEnabled; } return true;}
这段代码感兴趣可以拿走,以便在 Capture
之前可以进行预判。
从这段代码可以很清楚地知道,如果元素已不可见 (IsVisible
为 false
) 或者不可用(IsEnabled
为 false
),则不可 Capture
。
以此为线索,果然发现调试的项目中在 MouseDown
事件里把元素隐藏了。
总结:
- 如果元素不可见或不可用,则
Mouse.Capture
会失败。
顺便还发现一个问题,Stylus.Capture(IInputElement)
中居然直接调用的是 Mouse.Capture(IInputElement)
。
阅读全文
0 0
- CaptureMouse/CaptureStylus 可能会失败
- 为什么锤子系统可能会失败?
- 使用远程桌面维护系统可能会失败
- 安装window7可能会失败的原因
- 不允许进行远程连接可能会导致此失败 error: 40
- sql 2005不允许进行远程连接可能会导致此失败
- syspolicy_purge_history SQL Server 代理作业可能会失败 SQL Server 2008
- 不要瞎改分区,可能会造成fastboot,dd等失败
- 在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败
- 在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败
- 不允许进行远程连接可能会导致此失败 error: 40 (总结)
- VS在连接数据库实例时,不允许进行远程连接可能会导致此失败
- 在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败
- 在默认的设置下SQL Server不允许进行远程连接可能会导致此失败
- 项目的执行--有偏差随意调整计划可能会导致项目的失败
- 没有选择Debug构建方式,为文件的某行设置断点可能会失败
- osql -E登录报错:设置SQL Server不允许远程连接这个事实可能会导致失败
- wpf鼠标捕获与控件交互——UIElement.CaptureMouse
- 干货分享丨如何恢复Linux下误删etc目录数据
- 数据结构 直接插入排序
- 参数化防止注入
- Linux中静态库和共享库的制作方法
- EditTextt如何设置获取焦点后,光标在末尾的解决办法
- CaptureMouse/CaptureStylus 可能会失败
- "=="和equals方法究竟有什么区别?
- day01
- java数组
- RxJava:walfud 彻底搞懂 RxJava 系列 笔记
- 数据库的备份
- XSSFSheet对象使用getLastRowNum()方法/合并单元格
- 阿尔法元秒杀阿法狗,人工智能时代开启了吗
- 计算机网络原理