2009-05-06 14 views

Respuesta

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

¿hay otras maneras de registrar las teclas de acceso directo, por ejemplo, en XAML? – Qwertie

+2

Verifique este hilo. http://stackoverflow.com/questions/612966/keyboard-events-in-a-wpf-mvvm-application –

1

Finalmente descubrí cómo hacer esto con Comandos en XAML. Desafortunadamente, si desea utilizar un nombre de comando personalizado (no uno de los comandos predefinidos como ApplicationCommands.Open) es necesario definirlo en el código subyacente, algo como esto:

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

El XAML es algo como esto. ..

<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> 

Y por supuesto que necesita un controlador:

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

También puede crear un RoutedUICommand y asociar un gesto de teclado particular al comando para evitar tener que colocar el KeyBinding código en cada ventana, es posible que desee implementar esto en – jpierson

Cuestiones relacionadas