从字面上看,我想知道。
在某些情况下,.Focus()看起来比SetFocusedElement()更好。但另一个案例,它是逆转。所以我必须知道那里有什么不同的东西。
此外,通过MSDN,Focus()用于键盘焦点,而SetFocusedElement用于逻辑焦点。但是在逻辑焦点和键盘焦点之间我感觉不一样。
答案 0 :(得分:8)
键盘焦点通常更容易理解,因为这实际上是用户键入时接收键盘输入的控件。因此,如果您单击TextBox,它将获得键盘焦点,您可以开始键入。其他控件有其他行为,可能并不真正支持键盘,但它们仍然可以获得键盘焦点。
对于逻辑焦点,您的应用程序可以由几个部分组成。例如,大多数应用程序顶部都有一个ToolBar / Ribbon,然后是下面的主要内容。现在,假设您的内容是一个当前具有键盘焦点的TextBox。单击工具栏/功能区控件时,键盘焦点将移动到该控件。但是你真的想“记住”你内容中的TextBox之前有键盘焦点。
为实现此目的,ToolBar / Ribbon将创建新的“焦点范围”。因此,当您单击ToolBar / Ribbon控件时,您将移动键盘焦点,但TextBox仍然具有窗口的逻辑焦点。这样,当用户使用ToolBar / Ribbon完成后,TextBox就会被赋予键盘焦点。
如果您与其他应用程序交互,则同样如此,因为您的应用程序没有键盘焦点。当你回到应用程序中工作时,它会使用逻辑焦点来了解最后一个键盘焦点的人(并且应该将其恢复)。
答案 1 :(得分:2)
使用FocusManager.SetFocusedElement()
,您可以指定要在元素上设置焦点的UserControl
。因此,您可以将焦点放在程序不同部分的控件上。
Control.Focus()
只是直截了当,你把注意力集中在所说的控件上(这更直观)。
狂野猜测:你不正确地使用FocusManager.SetFocusedElement()
,导致不必要的行为但是底线,这真的是一样的。
旁注:WPF中的“逻辑”焦点和“键盘”焦点为2 different things。