2011-06-14 77 views
7

我有一个处理TextBox的PreviewLostKeyboardFocus事件。当我使用键盘(Tab键)或鼠标(通过单击表单上的另一个TextBox)离开文本框时它会触发。用户是否使用键盘或鼠标离开WPF文本框?

该处理程序需要一个KeyboardFocusChangedEventArgs,它有一个名为KeyboardDevice的属性,在任何一种情况下(我希望在使用鼠标时都可以在这里找到null)都不为空。

问题:如何判断用户是使用键盘还是鼠标离开WPF文本框?

+0

如果焦点离开控件,因为其他控件抓住焦点[在代码](http://msdn.microsoft.com/en-us/library/system.windows.uielement.focus.aspx)? – Vlad 2011-06-14 13:59:11

+2

设置按键侦听程序并检测选项卡是否被按下不是更好吗?如果选项卡按下,则可以相应地作出响应,否则就会假设它们以其他方式离开,例如通过鼠标。我不熟悉WPF,但在许多UI库中,您可以捕获Tab键,并覆盖它的操作。我猜你实际上想要将一个标签插入文本区域,而不是离开去下一个字段。 – Kibbee 2011-06-14 14:09:05

+0

我同意Kibbee在这里:如何为Tab键添加一个'EventHandler',或者如果调用例如 – Damascus 2011-06-14 14:20:23

回答

3

e.KeyboardDevice.GetKeyStates(Key.Tab)(其中e是类型KeyboardFocusChangedEventArgs的)报告:

  • (当使用鼠标来改变焦点)
  • 向下,已切换(当TAB是使用离开文本框)

会为你工作?

+0

今天我也有这个想法,但认为可能存在计时问题,因为您在这里有两个不同的事件。此处的另一个评论也表达了同样的观点:在90%的情况下,这取决于在按键被按下时是否触发事件。我不会依赖那个。 – ygoe 2012-07-30 07:54:49

相关问题