控制级别的Silverlight 4关键事件

时间:2012-01-12 16:59:48

标签: c# silverlight silverlight-4.0

我有一个Silverlight控件(ChildWindow),我希望收到所有按键事件。问题是,如果我只是说

this.KeyDown += new KeyEventHandler(EventDetailsPopup_UC_KeyDown)

它不起作用,因为事件被路由到它的所有子控件。如何从UserControl或ChildWindow级别接收键或鼠标事件?感谢

2 个答案:

答案 0 :(得分:2)

你没有描述你的意思“它不会起作用”,但我至少可以给你一些背景知识。

Silverlight支持路由事件的概念。当在子控件上触发路由事件时,它会向上传递逻辑树,在控件的父节点上触发,然后在父节点的父节点上触发......直到满足根视觉。路由事件列表详见this MSDN page。这称为冒泡

看起来您想阻止子控件看到此事件?即你想通过将其设置为已处理来取消它。不幸的是,这是不可能的,因为子控件将始终首先接收事件。要支持此功能,您需要一个名为隧道的功能,其中“预览”事件在触发冒泡事件之前首先从父级隧道传输到子级。这是WPF特有的功能,如上面引用的MSDN页面中所述。

答案 1 :(得分:0)

或者,如果“不工作”意味着您没有参加活动。 可能是因为某些子元素已将eventarguments的Handled参数设置为true。

但你仍然可以在你的子窗口的构造函数中注册代码中的侦听处理事件:

this.AddHandler(KeyDownEvent, (KeyEventHandler)YourHandlerFunction, true);