2010-07-14 15 views
16

Come assegnare un tasto di scelta rapida a un pulsante in WPF?Assegnare il tasto di scelta rapida a un pulsante in WPF

Googling mi ha dato la risposta come aggiungere _ invece di '&' in Winforms standard.

Così, dopo che ho fatto, come di seguito:

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

non ho trovato 'H' sottolineato.

Questo è il primo problema.

Il secondo problema è che, come eseguirlo dopo aver premuto Alt + H in fase di esecuzione. Dire solo per visualizzare una finestra di messaggio è sufficiente per l'esempio.

Sto usando C#, WPF

Grazie.

+1

La sottolineatura è visibile solo quando si preme ALT. – angularsen

risposta

2

Il collegamento è solo h per il codice di esempio. On

Per visualizzare inizialmente le sottolineature per i collegamenti è un'impostazione di Windows e non controllata da un'app. In Windows XP, vai a Proprietà dello schermo -> Aspetto -> Effetti e vedrai una casella con l'etichetta "Nascondi lettere sottolineate per la navigazione della tastiera finché non premo il tasto Alt". Per Vista/Win7 penso che abbiano spostato quell'impostazione da qualche altra parte.

3

Per associare gesti della tastiera, è necessario utilizzare i KeyGestures con comandi. Controlla commands per ulteriori informazioni su questo. Inoltre ci sono un sacco di comandi predefiniti che possono essere usati direttamente nell'applicazione (come Taglia, Copia, Incolla, Guida, Proprietà, ecc.).

33

Soluzione per il legame chiave (+ tasto vincolante) con propri comandi:

Il corpo di file 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> 

e Cs file:

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

Grazie ... ma ...Non credo che ciò potrebbe essere fatto senza dover modificare XAML in quattro diversi posti ogni volta che si desidera una scorciatoia da tastiera singola? – Qwertie

+0

Solo per salvare qualcun altro un po 'di dolore - assicurati che 'Window.Resources' sia PRIMA di' Window.CommandBindings/InputBindings'. Altrimenti, ti imbatterai in un problema di runtime che non è in grado di trovare la risorsa. – jep

+0

Tutto ciò di cui avevo bisogno era la sezione '', e ho associato ogni 'KeyBinding' a una proprietà' ICommand' nel mio modello di vista. –

2

La soluzione più semplice che ho trovato è incollare un'etichetta all'interno del pulsante:

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

Questo è un po 'vecchio, ma mi sono imbattuto nello stesso problema oggi.
Ho trovato che la soluzione più semplice è usare semplicemente un elemento AccessText per il contenuto del pulsante.

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

Quando si preme il tasto Alt chiave , la 'H' sarà sottolineato sul pulsante.
Quando si preme la combinazione di tasti Alt + H, verrà eseguito il comando associato al pulsante.

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

+5

Esattamente perché si dovrebbe sempre sentirsi liberi di fare un po 'di "negromanti" qui su SO. Trovo la tua soluzione molto elegante. Grazie. – Barton

+9

Un po 'tardi alla festa, ma anche "

+1

@ MikeEason È passato un po 'di tempo da quando ho scritto questa risposta, e sono completamente d'accordo con te. In entrambi i casi funziona esattamente allo stesso modo e la decisione spetta all'utente. La pagina MSDN per [AccessText] (https://msdn.microsoft.com/en-us/library/system.windows.controls.accesstext%28v=vs.110%29.aspx#exampleToggle) ha un esempio che mostra l'uso entrambi i metodi. – jhenninger

Problemi correlati