MVVM Обрабатывать все необработанные нажатия клавиш в ViewModel - PullRequest
0 голосов
/ 30 ноября 2010

Я не знаю, является ли это хорошим способом работы, но мне нужно обрабатывать все необработанные нажатия клавиш на моей ViewModel, поэтому моя идея состояла в том, чтобы использовать поведение в моем ShellView, которое бы передавало все необработанные нажатия клавиш на ViewModel .. 1001 *

Но проблема в том, как получить все необработанные нажатия клавиш?

Вот моя первая попытка просто поймать их

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 всегда ложно, поэтому чего мне не хватает , даже если я нажимаю клавишу в текстовом поле ?

Ответы [ 2 ]

0 голосов
/ 30 ноября 2010

Выезд MSDN

Обратите внимание на раздел «Концепция обработки», особенно на часть handledEventsToo.

0 голосов
/ 30 ноября 2010

Вы устанавливаете e.Handled = True, чтобы сообщить программе, что событие обработано, и прекратить выполнение любых других функций, зарегистрированных в этом событии.

Например, если вы подключили два метода к KeyPressedсобытие, и первое устанавливает e.Handled = True, затем второе событие никогда не будет выполнено.

Я предполагаю, что все, что вам действительно нужно сделать, это убедиться, что ваш UnhandledKeyPressedEvent стоит последним в последовательности событий, и чтолюбые другие события KeyPressed, установленные e.Handled = True, чтобы предотвратить выполнение UnhandledKeyPressedEvent.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...