C# 检测在按下键盘Tab键后是否接收到焦点

C# 检测在按下键盘Tab键后是否接收到焦点,c#,wpf,C#,Wpf,我需要有逻辑来处理元素的GotKeyboardFocus事件,并区分它是由Tab键触发的还是由其他方式触发的。但我知道只有广义事件GotKeyboardFocus。如何通过在事件处理程序方法中按Tab键来检测是否接收到焦点?或者是否有其他事件?您必须订阅GotFocus或GotKeyboardfocus事件,然后检查是否有按键: <TextBox GotFocus="UIElement_OnGotFocus"/> 也许您希望扩展TextBox类来处理此事件,而不在XAML中附加E

我需要有逻辑来处理元素的
GotKeyboardFocus
事件,并区分它是由Tab键触发的还是由其他方式触发的。但我知道只有广义事件
GotKeyboardFocus
。如何通过在事件处理程序方法中按Tab键来检测是否接收到焦点?或者是否有其他事件?

您必须订阅
GotFocus
GotKeyboardfocus
事件,然后检查是否有按键:

<TextBox GotFocus="UIElement_OnGotFocus"/> 
也许您希望扩展TextBox类来处理此事件,而不在XAML中附加EventHandler

public class CustomTextBox : TextBox
{
  protected override void OnGotFocus (System.Windows.RoutedEventArgs e)
  {
    if (Keyboard.PrimaryDevice.IsKeyDown(Key.Tab))
    {
      // Do something when Tab is pressed
    }
  }
}

了解为什么要使用不同的逻辑可能会很有帮助。@OldBoyCoder是的,例如,当模式窗口关闭且鼠标光标位于文本框上方时会调用此事件,在这种情况下,无需执行任何操作。我不是WPF专家,但我看到事件的KeyboardFocusChangedEventArgs参数具有设备属性()。那有用吗?另一种方法是在模式关闭事件中设置一些全局设置,这些设置可以在GotKeyboardFocus中检测到,您必须手动执行。只是焦点。在弹出对话框时重置它。
public class CustomTextBox : TextBox
{
  protected override void OnGotFocus (System.Windows.RoutedEventArgs e)
  {
    if (Keyboard.PrimaryDevice.IsKeyDown(Key.Tab))
    {
      // Do something when Tab is pressed
    }
  }
}