Frage

Ich habe geplant, Unterstützung für die Schaltflächen Zurück und Vorwärts, auf vielen Tastaturen, um meine WPF-Anwendung gefunden hinzuzufügen, aber ich bin zu kämpfen, sie zu erhalten zu arbeiten.

Ich habe versucht, einen Standard KeyBinding zu BrowserBack und BrowserForward verwenden, keine Freude. Getestet habe ich den Code mit der ESC-Taste, um sicherzustellen, war es im Prinzip zu arbeiten, und dass Schlüssel war in Ordnung.

Nextup behandeln ich das KeyUp-Ereignis, aber der Schlüssel, der gesendet wird ist „System“, das nutzlos ist, und wenn ich KeyInterop.VirtualKeyFromKey bekomme ich nur 0 zurückgegeben.

Ich fange an zu glauben, dass PInvoke / Trapping echte Fenstermeldungen die einzige Option sein werden, aber ich würde lieber vermeiden, dass, wenn jemand irgendwelche gute Ideen?

Oh, und die Schlüssel selbst auf jeden Fall arbeiten, und meine Tastatur angeschlossen ist; -)

Aktualisieren : Sie schlagen mich SystemKey erwischte einen Punkt zu verwenden, die ich es bekommen kann die Arbeit mit:

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

Und das scheint für die Tastatur-Taste zu arbeiten, aber es funktioniert nicht für die entsprechende Note „flick“ (die nächste und zurück simuliert). Diese leichte Schläge funktionieren in den Browsern, aber nach meinem KeyUp Ereignis alles, was sie zu senden ist „LeftAlt“ und sonst nicht viel mehr!

** Update Wieder **: Richs Kommentar hat mich zu diesem:

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

Welche scheint eine Behandlung .. Flicks zu arbeiten!

War es hilfreich?

Lösung

Die Tasten Sie beziehen sich auf als MediaCommands behandelt, NavigationCommands, Application, EditingCommands oder ComponentCommands in WPF - Sie werden ein Command für jede der Schaltflächen hinzufügen müssen Sie abfangen wollen, zum Beispiel: -

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

Und relevante Ereignisse im Code hinzufügen hinter: -

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

Ich würde in Ihrem Fall sagen, es ist wahrscheinlich NavigationCommands.BrowseForward und NavigationCommands.BrowseBack. Check out ... http://msdn.microsoft .com / en-us / library / system.windows.input.navigationcommands.aspx und http://msdn.microsoft.com/en-us/library/system.windows.input.navigationcommands_members.aspx

Überprüfen Sie für weitere Informationen meine Blog-Post und mehr Code-Beispiele.

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

Andere Tipps

In PreviewKeyUp Fall sollten Sie in der Lage sein, dies zu tun -

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

Ich hasse es zu sagen, aber das funktionierte gut für mich:

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

Wenn ich drücken Sie die Vorwärts-Taste auf meiner Tastatur tut es eine Paste.

Ist es möglich, etwas anderes den Tastendruck abfängt?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top