Domanda

Avevo intenzione di aggiungere il supporto per i pulsanti Avanti e Indietro, trovato su molte tastiere, al mio WPF app, ma sto lottando per farli funzionare.

Ho provato con una combinazione di tasti standard per BrowserBack e BrowserForward, nessuna gioia. Ho provato il codice con il tasto ESC per assicurarsi che stava lavorando in linea di principio, e quella chiave andava bene.

Nextup ho gestito l'evento KeyUp, ma la chiave che viene inviato è "Sistema", che è inutile, e se uso KeyInterop.VirtualKeyFromKey ottengo solo 0 restituito.

sto iniziando a pensare che PInvoke / intrappolando veri messaggi di finestra stanno per essere l'unica opzione, ma io preferirei evitare che se qualcuno ha qualche idea brillante?

Oh, e le chiavi stesse sicuramente il lavoro, e la mia tastiera è collegata; -)

Aggiorna : Essi suggeriscono di utilizzare SystemKey mi ha fatto un punto che posso farlo funzionare con:

new KeyBinding(TestCommand, new KeyGesture(Key.Left, ModifierKeys.Alt));

E che sembra funzionare per il pulsante della tastiera, ma non funziona per il tocco corrispondente "flick" (che simula il prossimo e ritorno). Quei colpi di frusta funzionano bene nei browser, ma secondo la mia evento KeyUp tutti stanno inviando è "AltSinistro" e non molto altro!

** Aggiornamento ** Anche in questo caso: il commento di Rich mi ha fatto questo:

this.CommandBindings.Add(new CommandBinding(NavigationCommands.BrowseBack, BrowseBack_Executed));
this.CommandBindings.Add(new CommandBinding(NavigationCommands.BrowseForward, BrowseForward_Executed));

che sembra funzionare un piacere .. Flicks troppo!

È stato utile?

Soluzione

I pulsanti si fa riferimento a come vengono gestiti MediaCommands, NavigationCommands, ApplicationCommands, EditingCommands o ComponentCommands in WPF - avrete bisogno di aggiungere un CommandBinding per ciascuno dei pulsanti da intercettare, ad esempio: -

<Window.CommandBindings>
<CommandBinding Command="MediaCommands.PreviousTrack" 
                Executed="PreviousTrackCommandBinding_Executed"/>
<CommandBinding Command="MediaCommands.NextTrack"             
                Executed="NextTrackCommandBinding_Executed"/>

E aggiungere eventi rilevanti in codice dietro: -

private void PreviousTrackCommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
{
    MessageBox.Show("Previous track");
}
private void NextTrackCommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
{
    MessageBox.Show("Next track");
}

Direi che nel tuo caso è probabilmente NavigationCommands.BrowseForward e NavigationCommands.BrowseBack. Scopri ... http://msdn.microsoft .com / it-it / library / system.windows.input.navigationcommands.aspx e http://msdn.microsoft.com/en-us/library/system.windows.input.navigationcommands_members.aspx

Guarda il mio post sul blog per maggiori informazioni e più esempi di codice.

http://richardhopton.blogspot.com/2009 /08/responding-to-mediapresentation-buttons.html

Altri suggerimenti

Nel caso in PreviewKeyUp, si dovrebbe essere in grado di fare questo -

private void Window_PreviewKeyUp(object sender, KeyEventArgs e){
  if (e.SystemKey == Key.BrowserBack)
    // Do something ...

Mi dispiace dirlo, ma questo ha funzionato bene per me:

<RichTextBox>   
       <RichTextBox.InputBindings>
           <KeyBinding Key="BrowserForward" Command="Paste"/>
       </RichTextBox.InputBindings>
       <FlowDocument>
            <Paragraph>
                Some text here to cut and paste...
                            </Paragraph>
            </FlowDocument>
        </RichTextBox>

Quando si preme il tasto Avanti sulla mia tastiera lo fa una pasta.

E 'possibile qualcos'altro sta intercettando la pressione di un tasto?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top