如题:
我做了一下试验 发现ScrollView会自动截获keydown事件 而ScrollView的keydown的路由事件策略是冒泡策略 就是只会向上传递 不会向下传递 而且这个截获是完全彻底的截获 无论你在哪个控件触发keydown事件 都被scrollview直接捕获了 事件源直接就是scrollview
我现在需要scrollview中的控件捕获到keydown事件 有弄过的吗?
把这个控件树形结构弄出来,通过重写直接用最底的容器(实现了时间的UI元素)
最底层也是容器级别的控件,而由于该事件的路由策略是冒泡策略 因此永远不会传入底层控件,目前我是采用记录当前焦点控件来实现,当scrollview触发keydown时判断当前焦点控件是否是需要处理的控件,如果是则处理,否则不处理。我只是不知道为什么微软要这样设计,为何不让底层控件触发采用冒泡策略上传到顶层,我猜测可能是因为scrollview会响应左右方向键。
@我丫的是条鱼:
wpf处理了handled而已,底层控件是可以收到的。
而且你要相信 —— 窗口是基于消息的。
那么事件都是在消息层上进行封装的,比如滚动的事件没有 —— 你可以从消息层自行创建。
底层容器无法解决这个问题,对于消息机制这个我不太熟,所以也没什么思路。最终我还是自己记录了一下当前焦点控件,然后自己做了一下判断。