Focus scope in WPF

FocusScope 在wpf中起了很多作用,如logic focus,keyboard focus,每一个focus  scope 下可以有一个逻辑焦点;特别在routed command路由时,  

默认情况下,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

posted on 2009-08-24 14:35  oyl  阅读(577)  评论(0编辑  收藏  举报

导航