2008-09-24 7 views
4

Je voudrais soutenir les raccourcis clavier dans mon application WPF XBAP, tels que Ctrl + O pour etc. « Ouvrir » Comment puis-je désactiver les navigateurs intégrés dans les raccourcis clavier et les remplacer avec le mien?Raccourcis clavier dans un XBAP

Répondre

1

Vous ne pouvez pas désactiver la gestion intégrée des touches du navigateur. Ce n'est pas votre place en tant que contenu du navigateur pour remplacer les propres touches de raccourci du navigateur.

0

Ce n'est pas une réponse, mais un commentaire. Ce serait bien de désactiver le comportement de la touche Backspace dans un XBAP, rien de plus agaçant que d'appuyer sur la touche de retour arrière alors qu'il n'est pas dans un élément et que le navigateur vous dirige vers la page Web précédente.

1

Si vous êtes désespéré de le faire, vous pouvez alors essayer d'ajouter un crochet de fenêtres et d'intercepter les frappes qui vous intéressent.

Nous devions le faire pour empêcher l'aide d'ouvrir IE (que Dieu ait pitié sur mon âme).

Voir: http://msdn.microsoft.com/en-us/library/system.windows.interop.hwndsource.addhook(VS.85).aspx

Et voici un code (arraché de notre app.xaml.vb) qui peut aider (désolé, VB):

Private Shared m_handle As IntPtr 
Private Shared m_hook As Interop.HwndSourceHook 
Private Shared m_hookCreated As Boolean = False 

'Call on application start 
Public Shared Sub SetWindowHook(ByVal visualSource As Visual) 
    'Add in a Win32 hook to stop the browser app from loading 
    If Not m_hookCreated Then 
     m_handle = DirectCast(PresentationSource.FromVisual(visualSource), Interop.HwndSource).Handle 
     m_hook = New Interop.HwndSourceHook(AddressOf WindowProc) 
     Interop.HwndSource.FromHwnd(m_handle).AddHook(m_hook) 
     m_hookCreated = True 
    End If 
End Sub 

'Call on application exit 
Public Shared Sub RemoveWindowHook() 
    'Remove the win32 hook 
    If m_hookCreated AndAlso Not m_hook Is Nothing Then 
     If Not Interop.HwndSource.FromHwnd(m_handle) Is Nothing Then 
      Interop.HwndSource.FromHwnd(m_handle).RemoveHook(m_hook) 
     End If 
     m_hook = Nothing 
     m_handle = IntPtr.Zero 
    End If 
End Sub 

'Intercept key presses 
Private Shared Function WindowProc(ByVal hwnd As System.IntPtr, ByVal msg As Integer, ByVal wParam As System.IntPtr, ByVal lParam As System.IntPtr, ByRef handled As Boolean) As System.IntPtr 
    'Stop the OS from handling help 
    If msg = WM_HELP Then 
     handled = True 
    End If 
    Return IntPtr.Zero 
End Function 
Questions connexes