首页 新闻 会员 周边 捐助

WPF ScrollView中的控件如何捕获keydown事件

0
悬赏园豆:30 [已解决问题] 解决于 2017-08-09 08:15

如题:

我做了一下试验  发现ScrollView会自动截获keydown事件 而ScrollView的keydown的路由事件策略是冒泡策略 就是只会向上传递 不会向下传递 而且这个截获是完全彻底的截获 无论你在哪个控件触发keydown事件 都被scrollview直接捕获了 事件源直接就是scrollview 

我现在需要scrollview中的控件捕获到keydown事件 有弄过的吗?

我丫的是条鱼的主页 我丫的是条鱼 | 菜鸟二级 | 园豆:240
提问于:2017-07-28 14:02
< >
分享
最佳答案
0

把这个控件树形结构弄出来,通过重写直接用最底的容器(实现了时间的UI元素)

收获园豆:30
花飘水流兮 | 专家六级 |园豆:13615 | 2017-07-28 17:48

最底层也是容器级别的控件,而由于该事件的路由策略是冒泡策略 因此永远不会传入底层控件,目前我是采用记录当前焦点控件来实现,当scrollview触发keydown时判断当前焦点控件是否是需要处理的控件,如果是则处理,否则不处理。我只是不知道为什么微软要这样设计,为何不让底层控件触发采用冒泡策略上传到顶层,我猜测可能是因为scrollview会响应左右方向键。

我丫的是条鱼 | 园豆:240 (菜鸟二级) | 2017-08-07 14:43

@我丫的是条鱼:

wpf处理了handled而已,底层控件是可以收到的。

而且你要相信 —— 窗口是基于消息的。

那么事件都是在消息层上进行封装的,比如滚动的事件没有 —— 你可以从消息层自行创建。

花飘水流兮 | 园豆:13615 (专家六级) | 2017-08-08 09:32
其他回答(1)
0

底层容器无法解决这个问题,对于消息机制这个我不太熟,所以也没什么思路。最终我还是自己记录了一下当前焦点控件,然后自己做了一下判断。

我丫的是条鱼 | 园豆:240 (菜鸟二级) | 2017-08-09 08:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册