2010-07-14 32 views
16

¿Cómo se asigna la tecla de atajo a un botón en WPF?Asignar tecla de acceso directo a un botón en WPF

Google me dio la respuesta para agregar _ en lugar de '&' en Winforms estándar.

Así que después de lo que he hecho de la siguiente manera:

<Button Name="btnHelp" Content="_Help"></Button> 

no he encontrado 'H' subrayados.

Ese es el primer problema.

Segundo problema es que, cómo ejecutar eso después de presionar Alt + H en tiempo de ejecución. Digamos que para mostrar un cuadro de mensaje es suficiente para el ejemplo de sake.

estoy usando C#, WPF

Gracias.

+1

El subrayado solo es visible al presionar hacia abajo ALT. – angularsen

Respuesta

2

El atajo es solo h para su código de muestra. En

Para mostrar inicialmente los subrayados para accesos directos es una configuración de Windows y no controlada por una aplicación. En Windows XP, vaya a Propiedades de Pantalla -> Apariencia -> Efectos y verá una casilla de verificación con la etiqueta "Ocultar letras subrayadas para la navegación del teclado hasta que presione la tecla Alt". Para Vista/Win7, creo que movieron esa configuración a otro lugar.

3

Para aprisionar gestos del teclado, es necesario utilizar los KeyGestures con comandos. Consulte commands para obtener más información sobre esto. También hay muchos comandos predefinidos que se pueden usar directamente en su aplicación (como, Cortar, Copiar, Pegar, Ayuda, Propiedades, etc.).

33

Solución para la asignación de teclas (+ Botón de unión) con los comandos propios:

El cuerpo del archivo XAML:

<Window.Resources> 
    <RoutedUICommand x:Key="MyCommand1" Text="Text" /> 
    <RoutedUICommand x:Key="MyCommand2" Text="Another Text" /> 
</Window.Resources> 

<Window.CommandBindings> 
    <CommandBinding Command="{StaticResource MyCommand1}" 
        Executed="FirstMethod" /> 
    <CommandBinding Command="{StaticResource MyCommand2}" 
        Executed="SecondMethod" /> 
</Window.CommandBindings> 

<Window.InputBindings> 
    <KeyBinding Key="Z" Modifiers="Ctrl" Command="{StaticResource MyCommand1}" /> 
    <KeyBinding Key="H" Modifiers="Alt" Command="{StaticResource MyCommand2}" /> 
</Window.InputBindings> 

<Grid> 
    <Button x:Name="btn1" Command="{StaticResource MyCommand1}" Content="Click me" /> 
    <Button x:Name="btn2" Command="{StaticResource MyCommand2}" Content="Click me" /> 
</Grid> 

y el archivo .CS:

public partial class Window1 : Window 
{ 
    public Window1() 
    { 
     InitializeComponent(); 
    } 

    public void FirstMethod(Object sender, ExecutedRoutedEventArgs e) 
    { 
     // btn1 
    } 

    public void SecondMethod(Object sender, ExecutedRoutedEventArgs e) 
    { 
     // btn2 
    } 
} 
+6

Gracias ... pero ...Supongo que no se puede hacer sin tener que editar el XAML en cuatro lugares diferentes cada vez que uno quiere un atajo de teclado único. – Qwertie

+0

Solo para salvar a alguien más, asegúrese de que 'Window.Resources' viene ANTES de' Window.CommandBindings/InputBindings'. De lo contrario, definitivamente se encontrará con un problema de tiempo de ejecución al no poder encontrar el recurso. – jep

+0

Todo lo que necesitaba aquí era la sección '', y unía cada 'KeyBinding' a una propiedad' ICommand' en mi modelo de vista. –

2

La solución más simple que he encontrado es pegar una etiqueta dentro del botón:

<Button Name="btnHelp"><Label>_Help</Label></Button> 
31

Esto es un poco viejo, pero me encontré con el mismo problema hoy.
Encontré que la solución más simple es simplemente usar un elemento AccessText para el contenido del botón.

<Button Command="{Binding SomeCommand}"> 
    <AccessText>_Help</AccessText> 
</Button> 

Cuando se pulsa la tecla Alt , la 'H' se subrayó en el botón.
Al presionar la combinación de teclas Alt + H, se ejecutará el comando que está vinculado al botón.

http://social.msdn.microsoft.com/Forums/vstudio/en-US/49c0e8e9-07ac-4371-b21c-3b30abf85e0b/button-hotkeys?forum=wpf

+5

Exactamente por qué uno siempre debe sentirse libre de hacer un poco de "necromanciación" aquí en SO. Encuentro tu solución muy elegante. Gracias. – Barton

+9

Un poco tarde para la fiesta, pero '

+1

@MikeEason Ha pasado un tiempo desde que escribí esta respuesta, y estoy totalmente de acuerdo con usted. De cualquier manera funciona exactamente igual, y la decisión depende del usuario. La página de MSDN para [AccessText] (https://msdn.microsoft.com/en-us/library/system.windows.controls.accesstext%28v=vs.110%29.aspx#exampleToggle) tiene un ejemplo que muestra el uso de cualquier método. – jhenninger

Cuestiones relacionadas