我不知道这是否是一种好的工作方式,但我需要处理我的ViewModel上所有未处理的击键,所以我的想法是在我的ShellView上使用一个行为,将所有未处理的击键转发给ViewModel .. < / p>
但问题是我如何得到所有未处理的按键?
这是我第一次尝试抓住他们
Public Class ForwardKeyBehavior
Inherits Behavior(Of DependencyObject)
Protected Overrides Sub OnAttached()
Keyboard.AddKeyDownHandler(Me.AssociatedObject, AddressOf OnKeyPressed)
Keyboard.AddPreviewKeyDownHandler(Me.AssociatedObject, AddressOf OnPreviewKeyPressed)
MyBase.OnAttached()
End Sub
Protected Overrides Sub OnDetaching()
Keyboard.RemoveKeyDownHandler(Me.AssociatedObject, AddressOf OnKeyPressed)
MyBase.OnDetaching()
End Sub
Private Sub OnPreviewKeyPressed(ByVal sender As Object, ByVal e As KeyEventArgs)
End Sub
Private Sub OnKeyPressed(ByVal sender As Object, ByVal e As KeyEventArgs)
If (Not e.Handled) Then
Trace.Write(e.Key.ToString())
End If
End Sub
End Class
但似乎e.Handled总是假的,所以即使我在文本框中按键
,我仍然缺少 ?答案 0 :(得分:0)
您设置e.Handled = True
告诉程序事件已被处理,并停止执行注册到该事件的任何其他功能。
例如,如果您将两个方法连接到KeyPressed事件,并且第一个设置e.Handled = True
,那么第二个事件将永远不会被执行。
我猜你真正需要做的就是确保你的UnhandledKeyPressedEvent在事件序列中排在最后,并且任何其他KeyPressed事件都设置为e.Handled = True
以阻止UnhandledKeyPressedEvent执行。
答案 1 :(得分:0)
查看MSDN
注意“处理的概念”部分,尤其是processedEventsToo部分。