WPF中的预览事件与命令使用详解
1. 预览事件(Preview Events)
在WPF中,所有控件都有以Preview开头的事件,许多预览事件由UIElement类拥有,而WPF中的所有控件都继承自该类。例如,UIElement定义了PreviewKeyDown事件,当元素获得焦点且按下某个键时会触发此事件。
PreviewKeyDown与同样由UIElement拥有的KeyDown事件有何不同呢?虽然它们的文档描述看起来相同,但二者的路由方式不同:
-冒泡(Bubbling):事件向根元素移动。
-隧道(Tunneling):事件向其起源移动。
在WPF中,Preview前缀是一种约定,表明一个事件是另一个事件的对应事件,所以PreviewKeyDown是KeyDown的对应事件。当一个获得焦点的元素上按下键时,首先由根元素引发PreviewKeyDown事件,该事件会沿着元素树向下隧道传递到实际获得焦点的元素;然后引发KeyDown事件,并冒泡返回根元素。
以下是一个简单的窗口标记示例: