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
}
}
}