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