2009-05-06 5 views

risposta

10
private void Window_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyboardDevice.Modifiers == ModifierKeys.Control) 
    { 
     // CTRL is down. 
    } 
} 
+0

ci sono altri modi per registrare tasti di scelta rapida, ad esempio, in XAML? – Qwertie

+2

Controlla questo thread. http://stackoverflow.com/questions/612966/keyboard-events-in-a-wpf-mvvm-application –

1

Ho finalmente capito come farlo con i comandi in XAML. Purtroppo, se si desidera utilizzare un nome di comando personalizzato (non uno dei comandi predefiniti come ApplicationCommands.Open) è necessario definire nel codebehind, qualcosa di simile:

namespace MyNamespace { 
    public static class CustomCommands 
    { 
     public static RoutedCommand MyCommand = 
      new RoutedCommand("MyCommand", typeof(CustomCommands)); 
    } 
} 

Il XAML va qualcosa come questo. ..

<Window x:Class="MyNamespace.DemoWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:MyNamespace" 
    Title="..." Height="299" Width="454"> 
    <Window.InputBindings> 
     <KeyBinding Gesture="Control+O" Command="local:CustomCommands.MyCommand"/> 
    </Window.InputBindings> 
    <Window.CommandBindings> 
     <CommandBinding Command="local:CustomCommands.MyCommand" Executed="MyCommand_Executed"/> 
    </Window.CommandBindings> 
</Window> 

E naturalmente è necessario un gestore:

private void MyCommand_Executed(object sender, ExecutedRoutedEventArgs e) 
{ 
    // Handle the command. Optionally set e.Handled 
} 
+0

Puoi anche creare un RoutedUICommand e associare al comando un particolare gesto della tastiera per evitare di dover posizionare il KeyBinding codice in ogni finestra che potresti voler implementare. – jpierson