在WPF中,您如何在任何时候检测到按键/按下事件

时间:2013-12-10 16:33:07

标签: wpf vb.net

在WPF中可以触发一个事件,如果按下键盘左右方向,现在哪个控件有焦点?

无论表格在哪里有焦点或他们在做什么,如果右或左被击中,我需要发生一些事情。

是否绝对需要跟踪每个键盘通知(KeyDown和KeyUp事件)?

修改:

有关详细信息,我有一个滑块,我需要随时通过左右按钮控制。我还有一个需要打开的组合框。我尝试使用此代码,但它阻止我使用组合框:

Private Sub sldDays_IsKeyboardFocusedChanged(sender As Object, e As System.Windows.DependencyPropertyChangedEventArgs) Handles sldDays.IsKeyboardFocusedChanged
    Keyboard.Focus(sldDays)
End Sub

编辑2:

如果将来有人绊倒我,我想我解决了我的问题:

我将此方法设置为PreviewKeyDown事件(这使得它始终首先作为键向下)

<Window x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    PreviewKeyDown="sliderKey"

然后就是这个事件:

Private Sub sliderKey(sender As System.Object, e As KeyEventArgs)
    Try
        If e.Key = Key.Right Then
            sldDays.Value += 1
        ElseIf e.Key = Key.Left Then
            sldDays.Value -= 1
        End If
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
End Sub

1 个答案:

答案 0 :(得分:0)

这来自路由事件在WPF中的工作方式。当从孩子到父母的冒泡事件出现时,隧道事件从父下降到孩子。因此,在您的情况下,拦截父窗口中的PreviewKeyDown事件可以捕获任何子控件中按下的所有键。 这个解释应该澄清任何疑问: http://wpf.2000things.com/2012/08/07/619-event-sequence-for-the-key-updown-events/