我对 WPF 很陌生,但我希望在任何人触摸窗口或任何子控件时捕获。
如果我捕获窗口的点击事件,则只有窗口内部空间捕获点击。它的子控件没有。
如何在全尺寸窗口的任何地方递归捕获屏幕上的任何点击/触摸事件?
提前谢谢了
我对 WPF 很陌生,但我希望在任何人触摸窗口或任何子控件时捕获。
如果我捕获窗口的点击事件,则只有窗口内部空间捕获点击。它的子控件没有。
如何在全尺寸窗口的任何地方递归捕获屏幕上的任何点击/触摸事件?
提前谢谢了
WPF 中的路由事件处理实现旨在为嵌套层次结构中的所有控件提供拦截和处理触摸和鼠标事件的机会。但是,控件具有阻止子级接收事件通知的能力。
这里对事件路由有一个很好的解释:http: //nui.joshland.org/2010/04/why-wont-wpf-controls-work-with-touch.html
所有控件都会收到一个 Preview 事件(点击或触摸),这是无法阻止的。在此之后,事件被“提升”为常规鼠标/触摸事件(在单击之前处理触摸)但是,如果层次结构中的任何控件用于“单击”(WPF 中的_MouseDown)事件处理设置事件的Handled属性args 为 true,则不会进一步传播该事件。
除非您正在处理触摸事件或操作,或者在代码中显式设置e.Handled = true,否则嵌套堆栈中的所有控件都应该接收 _MouseDown 事件。
如以下评论中所述,某些控件将设置“Handled = true”,这将阻止其容器接收相应的 _TouchDown 或 _MouseDown 事件。但是,它们都会首先收到 PreviewTouch/PreviewMouseDown。
另请注意,处理触摸事件会阻止处理鼠标事件。