(User)Control auf Tastenanschläge reagieren

  • WPF MVVM
  • .NET (FX) 4.5–4.8

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von kafffee.

    (User)Control auf Tastenanschläge reagieren

    Guten Morgen :)

    Ich hab ein kleines Problem, und zwar zeige ich ein UserControl in einem DialogWindow an. Wenn nun Enter gedrückt wird, soll eine Prozedur (OK) im dazugehörigen ViewModel ausgeführt werden, die u.a. das DialogWindow schliesst.

    Bisher hab ich Folgendes:

    XML-Quellcode

    1. <UserControl>
    2. <UserControl.InputBindings>
    3. <KeyBinding Key="Enter" Command="{Binding OK}"/>
    4. </UserControl.InputBindings>
    5. </UserControl>


    Es wird aber weder ausgeführt noch kommt ein Fehler...

    Hat mir jemand einen Rat oder kennt eine Alternative?
    Ich kenne deinen Aufbau nicht, gibt mehrere Möglichkeiten. Ich würde eine AttachedProperty im UC nutzen, das(die) entsprechende(n) Event(s) abonnieren, und den Command ausführen wenn diese gefeuert werden, dabei auch CommandPArameter nutzen, so kannst im ViewModel feststellen, woher das Enter denn nun kam.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D
    Kannst du das ein bisschen genauer erklären? Also ich weiss so ungefähr, wie man ein AttachedProperty macht und wie man ein Event abonniert, aber ich steig nicht ganz durch, wie du das in Verbindung miteinander meinst, damit ich dann mein Ziel erreiche...

    Mein Aufbau ist folgendermassen:

    Ich öffne ein DialogWindow, mit dem DataContext des ViewModels, in dessen DataTemplate die View des UserControls steckt.
    Ja, ist klar was du vorhast. Wir hatten das nun schon mehrfach, da bin ich nicht mehr bereit das noch mal zu schreiben.

    Die Controls die den Focus haben können sind dir bekannt, was für Events die haben, sollte auch geläufig sein, machste ein wenig Code Behind im UC, den Rest sagte ich ja schon. Wobei die CommandParameter nicht unbedingt sein müssen, reicht ja den Command auszuführen, wenn Enter gedrückt wird.

    Wobei ich gerade eine adneren Idee hab. Im UC-CodeBebind kommst auch an das Window. Das hat auch "KeyEvents", abonniere einfach was passendes im CodeBehind, wenns gefeuert wird den Command ausfüren.
    PS.
    Dazu aber keine AttachedProperty, da machste eine simple Property oder DependencyPropoerty im UC.
    Um ans Fenster zu kommen:
    learn.microsoft.com/de-de/dotn…w?view=windowsdesktop-8.0

    KAnnst ja mal probieren ob so die Eingabe nutzbar wird. Wenn nicht ruder zu Variante 1.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „DTF“ ()

    Jo, habs hinbekommen :)
    Im Code Behind des UC:

    VB.NET-Quellcode

    1. Private Sub UserControl_Loaded(sender As Object, e As RoutedEventArgs)
    2. AddHandler Window.GetWindow(Me).KeyDown, AddressOf TasteGedrueckt
    3. End Sub
    4. Private Sub TasteGedrueckt(sender As Object, e As KeyEventArgs)
    5. If (e.Key = Key.Enter Or e.Key = Key.Return) Xor (e.Key = Key.Escape) Then
    6. Dim vm = CType(Me.DataContext, OKDialogViewModel)
    7. vm.OK_Execute(Nothing)
    8. End If
    9. End Sub


    Danke dir :)