Control.Focus()和FocusManager.SetFocusedElement()之间的区别

mjk*_*026 4 wpf focus

从字面上看,我想知道这一点.

在某些情况下,.Focus()看起来比SetFocusedElement()更好.但另一个案例,它是逆转.所以我必须知道那里有什么不同的东西.

此外,通过MSDN,Focus()用于键盘焦点,而SetFocusedElement用于逻辑焦点.但我在逻辑焦点和键盘焦点之间感觉不一样.

Cod*_*ked 8

键盘焦点通常更容易理解,因为这实际上是用户键入时将接收键盘输入的控件.因此,如果您单击TextBox,它将获得键盘焦点,您可以开始键入.其他控件有其他行为,可能不真正支持键盘,但他们仍然可以获得键盘焦点.

对于逻辑焦点,您的应用程序可以由几个部分组成.例如,大多数应用程序顶部都有一个ToolBar/Ribbon,然后是下面的主要内容.现在,假设您的内容是一个当前具有键盘焦点的TextBox.单击工具栏/功能区控件时,键盘焦点将移动到该控件.但是你真的想"记住"你的内容中的TextBox之前有键盘焦点.

为此,ToolBar/Ribbon将创建新的"焦点范围".因此,当您单击ToolBar/Ribbon控件时,您将移动键盘焦点,但TextBox仍然具有窗口的逻辑焦点.这样,当用户使用ToolBar/Ribbon完成后,TextBox就会被赋予键盘焦点.

如果您与其他应用程序交互,则同样适用,因为您的应用程序没有键盘焦点.当你回到应用程序中工作时,它会使用逻辑焦点来了解最后一个键盘焦点的人(并且应该将其恢复).