控件级别的Silverlight 4密钥事件

本文关键字:密钥 事件 Silverlight 控件 | 更新日期: 2023-09-27 18:20:04

我有一个Silverlight控件(ChildWindow),我想接收所有按键关闭事件。问题是,如果我简单地说

this.KeyDown += new KeyEventHandler(EventDetailsPopup_UC_KeyDown)

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

控件级别的Silverlight 4密钥事件

你没有描述你所说的"它不起作用"是什么意思,但我至少可以给你一些背景知识。

Silverlight支持路由事件的概念。当路由事件在子控件上激发时,它会向上传递到逻辑树,在控件的父控件上激发,然后在父控件的父对象上激发等等。。。直到满足根视觉。此MSDN页面上详细列出了路由事件的列表。这被称为冒泡

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

或者如果"不工作"意味着您没有得到事件。这可能是因为某个子元素已将eventarguments的Handled参数设置为true。

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

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