Я хотел бы поддерживать сочетания клавиш в моем приложении WPF XBAP, например Ctrl + O для «Открыть» и т. Д. Как отключить встроенные в браузеры сочетания клавиш и заменить их своими?
Сочетания клавиш в XBAP
Ответы (3)
Вы не можете отключить встроенную обработку клавиш в браузере. Не ваше место в качестве содержимого браузера переопределять собственные сочетания клавиш браузера.
Если вы отчаянно пытаетесь это сделать, вы можете попробовать добавить ловушку Windows и перехватывать нажатия клавиш, которые вас интересуют.
Пришлось сделать это, чтобы не открылась помощь IE (да помилует меня Господь душу).
См .: http://msdn.microsoft.com/en-us/library/system.windows.interop.hwndsource.addhook(VS.85).aspx
И вот код (извлеченный из нашего app.xaml.vb), который может помочь (извините, 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
Не ответ, а комментарий. Было бы неплохо отключить поведение клавиши Backspace в XBAP, ничего более раздражающего, чем нажатие клавиши Backspace не в элементе, и браузер переместит вас на предыдущую веб-страницу.