Focus scope in WPF
默认情况下,routed command向上路由,当它发现一个新的focus scope时,会已新的focus scope为根,跳到新的focus scope下那个获得焦点的control.这就是为什么工具栏,菜单栏的menu item command可以被窗口中的text box捕捉到,因为工具栏,菜单栏默认就是一个新的FocusScope;与主窗口不在同一个focusScope 下。
具体可见:
http://msdn.microsoft.com/en-us/magazine/cc785480.aspx
http://pointlessly.blogspot.com/2007/11/wpf-routed-commands-and-focus-scope.html
http://wangmo.wordpress.com/2008/11/09/routedcommand-focus-scope/
还要注意到:在一个新的FocusScope(非主窗口focusScope)中button无法通过click获得keyboard focus;当我们click 一个button,mouse down时抛出GetKeyBoardFocus事件,mouse up时就会抛出LostKeyBoardFocus事件。这个是跟菜单栏的button一致的;菜单栏中的button click后也不能获得keyboard focus, 只能通过tab键来获得键盘焦点。
具体可见:
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/90663afa-dfd9-458a-8261-eca43be339e6