private void CoreDispatcher_AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs args) { if (args.EventType.ToString().Contains("Down") && !args.Handled) { var alt = (Window.Current.CoreWindow.GetKeyState(VirtualKey.Menu) & CoreVirtualKeyStates.Down) == CoreVirtualKeyStates.Down; var shift = (Window.Current.CoreWindow.GetKeyState(VirtualKey.Shift) & CoreVirtualKeyStates.Down) == CoreVirtualKeyStates.Down; var control = (Window.Current.CoreWindow.GetKeyState(VirtualKey.Shift) & CoreVirtualKeyStates.Down) == CoreVirtualKeyStates.Down; var windows = ((Window.Current.CoreWindow.GetKeyState(VirtualKey.LeftWindows) & CoreVirtualKeyStates.Down) == CoreVirtualKeyStates.Down) || ((Window.Current.CoreWindow.GetKeyState(VirtualKey.RightWindows) & CoreVirtualKeyStates.Down) == CoreVirtualKeyStates.Down); var character = ToChar(args.VirtualKey, shift); var keyDown = new KeyboardEventArgs { AltKey = alt, Character = character, ControlKey = control, EventArgs = args, ShiftKey = shift, VirtualKey = args.VirtualKey }; try { KeyDown?.Invoke(keyDown); } finally { args.Handled = keyDown.Handled; } } }
/// <summary> /// Invoked on every keystroke, including system keys such as Alt key combinations, when /// this page is active and occupies the entire window. Used to detect keyboard navigation /// between pages even when the page itself doesn't have focus. /// </summary> /// <param name="sender">Instance that triggered the event.</param> /// <param name="args">Event data describing the conditions that led to the event.</param> private void CoreDispatcher_AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs args) { var virtualKey = args.VirtualKey; // Only investigate further when Left, Right, or the dedicated Previous or Next keys are pressed if ((args.EventType == CoreAcceleratorKeyEventType.SystemKeyDown || args.EventType == CoreAcceleratorKeyEventType.KeyDown) && (virtualKey == VirtualKey.Left || virtualKey == VirtualKey.Right || (int)virtualKey == 166 || (int)virtualKey == 167)) { var coreWindow = Window.Current.CoreWindow; var downState = CoreVirtualKeyStates.Down; var menuKey = (coreWindow.GetKeyState(VirtualKey.Menu) & downState) == downState; var controlKey = (coreWindow.GetKeyState(VirtualKey.Control) & downState) == downState; var shiftKey = (coreWindow.GetKeyState(VirtualKey.Shift) & downState) == downState; var noModifiers = !menuKey && !controlKey && !shiftKey; var onlyAlt = menuKey && !controlKey && !shiftKey; if (((int)virtualKey == 166 && noModifiers) || (virtualKey == VirtualKey.Left && onlyAlt)) { // When the previous key or Alt+Left are pressed navigate back args.Handled = true; GoBack(this, new RoutedEventArgs()); } else if (((int)virtualKey == 167 && noModifiers) || (virtualKey == VirtualKey.Right && onlyAlt)) { // When the next key or Alt+Right are pressed navigate forward args.Handled = true; GoForward(this, new RoutedEventArgs()); } } }
private void HandleKeyDown(AcceleratorKeyEventArgs args) { var alt = (Window.Current.CoreWindow.GetKeyState(VirtualKey.Menu) & CoreVirtualKeyStates.Down) == CoreVirtualKeyStates.Down; var shift = (Window.Current.CoreWindow.GetKeyState(VirtualKey.Shift) & CoreVirtualKeyStates.Down) == CoreVirtualKeyStates.Down; var control = (Window.Current.CoreWindow.GetKeyState(VirtualKey.Shift) & CoreVirtualKeyStates.Down) == CoreVirtualKeyStates.Down; var windows = ((Window.Current.CoreWindow.GetKeyState(VirtualKey.LeftWindows) & CoreVirtualKeyStates.Down) == CoreVirtualKeyStates.Down) || ((Window.Current.CoreWindow.GetKeyState(VirtualKey.RightWindows) & CoreVirtualKeyStates.Down) == CoreVirtualKeyStates.Down); var character = ToChar(args.VirtualKey, shift); System.Diagnostics.Debug.WriteLine("{0} alt:{1} shift:{2} control:{3} windows:{4} virt:{5}", character, alt, shift, control, windows, args.VirtualKey); var keyDown = new KeyboardEventArgs { AltKey = alt, Character = character, ControlKey = control, EventArgs = args, ShiftKey = shift, VirtualKey = args.VirtualKey }; try { KeyDown?.Invoke(keyDown); } catch { } if (windows && (character == 'z' || character == 'Z')) { RaiseWindowZGestured(); } else if (args.KeyStatus.IsExtendedKey && args.VirtualKey == VirtualKey.Back) { RaiseGoBackGestured(); } else { return; } args.Handled = true; }
private void CoreDispatcher_AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs e) { if ((e.EventType == CoreAcceleratorKeyEventType.SystemKeyDown || e.EventType == CoreAcceleratorKeyEventType.KeyDown)) { var coreWindow = Windows.UI.Xaml.Window.Current.CoreWindow; var downState = CoreVirtualKeyStates.Down; var virtualKey = e.VirtualKey; bool winKey = ((coreWindow.GetKeyState(VirtualKey.LeftWindows) & downState) == downState || (coreWindow.GetKeyState(VirtualKey.RightWindows) & downState) == downState); bool altKey = (coreWindow.GetKeyState(VirtualKey.Menu) & downState) == downState; bool controlKey = (coreWindow.GetKeyState(VirtualKey.Control) & downState) == downState; bool shiftKey = (coreWindow.GetKeyState(VirtualKey.Shift) & downState) == downState; // raise keydown actions var keyDown = new KeyboardEventArgs { AltKey = altKey, Character = ToChar(virtualKey, shiftKey), ControlKey = controlKey, EventArgs = e, ShiftKey = shiftKey, VirtualKey = virtualKey }; try { _KeyDown?.Raise(this, keyDown); } catch { } // Handle F5 to refresh content if (virtualKey == VirtualKey.F5) { bool noModifiers = !altKey && !controlKey && !shiftKey; _RefreshRequest?.Raise(this, keyDown); } } }
/// <summary> /// Invoked on every keystroke, including system keys such as Alt key combinations, when /// this page is active and occupies the entire window. Used to detect keyboard navigation /// between pages even when the page itself doesn't have focus. /// </summary> private void CoreDispatcher_AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs args) { var virtualKey = args.VirtualKey; // Only investigate further when Left, Right, or the dedicated Previous or Next keys // are pressed if ((args.EventType == CoreAcceleratorKeyEventType.SystemKeyDown || args.EventType == CoreAcceleratorKeyEventType.KeyDown) && (virtualKey == VirtualKey.Left || virtualKey == VirtualKey.Right || (int)virtualKey == 166 || (int)virtualKey == 167)) { var coreWindow = Window.Current.CoreWindow; var downState = CoreVirtualKeyStates.Down; bool menuKey = (coreWindow.GetKeyState(VirtualKey.Menu) & downState) == downState; bool controlKey = (coreWindow.GetKeyState(VirtualKey.Control) & downState) == downState; bool shiftKey = (coreWindow.GetKeyState(VirtualKey.Shift) & downState) == downState; bool noModifiers = !menuKey && !controlKey && !shiftKey; bool onlyAlt = menuKey && !controlKey && !shiftKey; if (((int)virtualKey == 166 && noModifiers) || (virtualKey == VirtualKey.Left && onlyAlt)) { // When the previous key or Alt+Left are pressed navigate back args.Handled = true; var vm = DataContext as FrameworkPageViewModel; if (vm != null) { vm.NavigateBack(); } } } }
private void OnAcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs args) { // Ensures the ENTER key always runs the same code as your default button. if (args.EventType == CoreAcceleratorKeyEventType.KeyDown && args.VirtualKey == VirtualKey.Enter) { _searchViewModel.LaunchSearch(); } }
private void CoreDispatcher_AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs args) { if (args.EventType == CoreAcceleratorKeyEventType.SystemKeyDown || args.EventType == CoreAcceleratorKeyEventType.KeyDown) { HandleKeyDown(args); } }
public void AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs args) { if (args.VirtualKey == VirtualKey.Control) ctrlDown = args.EventType == CoreAcceleratorKeyEventType.KeyDown; if (args.VirtualKey == VirtualKey.F3 || (args.VirtualKey == VirtualKey.F && ctrlDown)) { searchKeyPressed(); args.Handled = true; } }
private static void Dispatcher_AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs args) { if (!_isEnterPressed) return; if (_command == null) return; if (args.VirtualKey != VirtualKey.Enter) return; if (args.EventType == CoreAcceleratorKeyEventType.KeyDown) { args.Handled = true; _command?.Execute(null); } }
private void CoreDispatcher_AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs e) { if (e.EventType.ToString().Contains("Down") && !e.Handled) { var args = KeyboardEventArgs(e.VirtualKey); args.EventArgs = e; try { KeyDown?.Invoke(args); } finally { e.Handled = e.Handled; } } }
private void zCoreDispatcher_AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs e) { if ((e.EventType == CoreAcceleratorKeyEventType.SystemKeyDown || e.EventType == CoreAcceleratorKeyEventType.KeyDown)) { var coreWindow = Windows.UI.Xaml.Window.Current.CoreWindow; var downState = CoreVirtualKeyStates.Down; var virtualKey = e.VirtualKey; bool winKey = ((coreWindow.GetKeyState(VirtualKey.LeftWindows) & downState) == downState || (coreWindow.GetKeyState(VirtualKey.RightWindows) & downState) == downState); bool altKey = (coreWindow.GetKeyState(VirtualKey.Menu) & downState) == downState; bool controlKey = (coreWindow.GetKeyState(VirtualKey.Control) & downState) == downState; bool shiftKey = (coreWindow.GetKeyState(VirtualKey.Shift) & downState) == downState; bool noModifiers = !altKey && !controlKey && !shiftKey; bool onlyAlt = altKey && !controlKey && !shiftKey; // raise keydown actions var keyDown = new KeyboardEventArgs { AltKey = altKey, Character = ToChar(virtualKey, shiftKey), ControlKey = controlKey, EventArgs = e, ShiftKey = shiftKey, VirtualKey = virtualKey }; try { KeyDown?.Invoke(keyDown); } catch { } if (((int)virtualKey == 166 && noModifiers) || (virtualKey == VirtualKey.Left && onlyAlt)) { // When the previous key or Alt+Left are pressed navigate back e.Handled = true; RaiseGoBackGestured(); } else if (((int)virtualKey == 167 && noModifiers) || (virtualKey == VirtualKey.Right && onlyAlt)) { // When the next key or Alt+Right are pressed navigate forward e.Handled = true; RaiseGoForwardGestured(); } else if (((int)virtualKey == 69 && controlKey)) { // when control-E e.Handled = true; RaiseControlEGestured(); } } }
private void OnAcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs args) { if ((args.EventType == CoreAcceleratorKeyEventType.KeyDown) || args.EventType == CoreAcceleratorKeyEventType.SystemKeyDown) { if (args.VirtualKey == VirtualKey.Right) { if (FeedListView.Items != null && FeedListView.SelectedIndex < FeedListView.Items.Count) { FeedListView.SelectedIndex++; if (FeedListView.Items.Count > FeedListView.SelectedIndex + ScrollOffset) { FeedListView.ScrollIntoView(FeedListView.Items[FeedListView.SelectedIndex + ScrollOffset]); } else { FeedListView.ScrollIntoView(FeedListView.Items.Count - 1); } } } if (args.VirtualKey == VirtualKey.Left) { if (FeedListView.SelectedIndex > 0) { FeedListView.SelectedIndex--; if (FeedListView.SelectedIndex - ScrollOffset > 0) { FeedListView.ScrollIntoView(FeedListView.Items[FeedListView.SelectedIndex - ScrollOffset]); } else { FeedListView.ScrollIntoView(FeedListView.Items[0]); } } } if (args.VirtualKey == VirtualKey.F5) { Vm.MasterDetailViewModel.LoadNewFeedsCommand.Execute(null); } } }
/// <summary> /// Invoked on every keystroke, including system keys such as Alt key combinations, when /// this page is active and occupies the entire window. Used to detect keyboard back /// navigation via Alt+Left key combination. /// </summary> /// <param name="sender">Instance that triggered the event.</param> /// <param name="args">Event data describing the conditions that led to the event.</param> void SettingsFlyout1_AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs args) { // Only investigate further when Left is pressed if (args.EventType == CoreAcceleratorKeyEventType.SystemKeyDown && args.VirtualKey == VirtualKey.Left) { var coreWindow = Window.Current.CoreWindow; var downState = CoreVirtualKeyStates.Down; // Check for modifier keys // The Menu VirtualKey signifies Alt bool menuKey = (coreWindow.GetKeyState(VirtualKey.Menu) & downState) == downState; bool controlKey = (coreWindow.GetKeyState(VirtualKey.Control) & downState) == downState; bool shiftKey = (coreWindow.GetKeyState(VirtualKey.Shift) & downState) == downState; if (menuKey && !controlKey && !shiftKey) { args.Handled = true; this.Hide(); } } }
/// <summary> /// 이 페이지가 활성화되고 전체 창 크기로 표시된 경우 Alt 키 조합 등 /// 시스템 키를 포함한 모든 키 입력에서 호출됩니다. 페이지에 포커스가 없으면 /// 페이지 간 키보드 탐색을 검색하는 데 사용됩니다. /// </summary> /// <param name="sender">이벤트를 트리거한 인스턴스입니다.</param> /// <param name="e">이벤트의 발생 조건을 설명하는 이벤트 데이터입니다.</param> private void CoreDispatcher_AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs e) { var virtualKey = e.VirtualKey; // 왼쪽 화살표, 오른쪽 화살표 또는 전용 이전 또는 다음 키를 눌렀을 때만 더 // 조사합니다. if ((e.EventType == CoreAcceleratorKeyEventType.SystemKeyDown || e.EventType == CoreAcceleratorKeyEventType.KeyDown) && (virtualKey == VirtualKey.Left || virtualKey == VirtualKey.Right || (int)virtualKey == 166 || (int)virtualKey == 167)) { var coreWindow = Window.Current.CoreWindow; var downState = CoreVirtualKeyStates.Down; bool menuKey = (coreWindow.GetKeyState(VirtualKey.Menu) & downState) == downState; bool controlKey = (coreWindow.GetKeyState(VirtualKey.Control) & downState) == downState; bool shiftKey = (coreWindow.GetKeyState(VirtualKey.Shift) & downState) == downState; bool noModifiers = !menuKey && !controlKey && !shiftKey; bool onlyAlt = menuKey && !controlKey && !shiftKey; if (((int)virtualKey == 166 && noModifiers) || (virtualKey == VirtualKey.Left && onlyAlt)) { // 이전 키 또는 Alt+왼쪽 화살표를 누르면 뒤로 탐색 e.Handled = true; this.GoBackCommand.Execute(null); } else if (((int)virtualKey == 167 && noModifiers) || (virtualKey == VirtualKey.Right && onlyAlt)) { // 다음 키 또는 Alt+오른쪽 화살표를 누르면 앞으로 탐색 e.Handled = true; this.GoForwardCommand.Execute(null); } } }
/// <summary> /// Wird bei jeder Tastatureingabe aufgerufen, einschließlich Systemtasten wie ALT-Tastenkombinationen, wenn /// diese Seite aktiv ist und das gesamte Fenster ausfüllt. Wird zum Erkennen von Tastaturnavigation verwendet /// zwischen Seiten, auch wenn die Seite selbst nicht den Fokus hat. /// </summary> /// <param name="sender">Instanz, von der das Ereignis ausgelöst wurde.</param> /// <param name="e">Ereignisdaten, die die Bedingungen beschreiben, die zu dem Ereignis geführt haben.</param> private void CoreDispatcher_AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs e) { var virtualKey = e.VirtualKey; // Weitere Untersuchungen nur durchführen, wenn die Taste "Nach links", "Nach rechts" oder die dezidierten Tasten "Zurück" oder "Weiter" // gedrückt werden if ((e.EventType == CoreAcceleratorKeyEventType.SystemKeyDown || e.EventType == CoreAcceleratorKeyEventType.KeyDown) && (virtualKey == VirtualKey.Left || virtualKey == VirtualKey.Right || (int)virtualKey == 166 || (int)virtualKey == 167)) { var coreWindow = Window.Current.CoreWindow; var downState = CoreVirtualKeyStates.Down; bool menuKey = (coreWindow.GetKeyState(VirtualKey.Menu) & downState) == downState; bool controlKey = (coreWindow.GetKeyState(VirtualKey.Control) & downState) == downState; bool shiftKey = (coreWindow.GetKeyState(VirtualKey.Shift) & downState) == downState; bool noModifiers = !menuKey && !controlKey && !shiftKey; bool onlyAlt = menuKey && !controlKey && !shiftKey; if (((int)virtualKey == 166 && noModifiers) || (virtualKey == VirtualKey.Left && onlyAlt)) { // Wenn die Taste "Zurück" oder ALT+NACH-LINKS-TASTE gedrückt wird, zurück navigieren e.Handled = true; this.GoBackCommand.Execute(null); } else if (((int)virtualKey == 167 && noModifiers) || (virtualKey == VirtualKey.Right && onlyAlt)) { // Wenn die Taste "Weiter" oder ALT+NACH-RECHTS-TASTE gedrückt wird, vorwärts navigieren e.Handled = true; this.GoForwardCommand.Execute(null); } } }
/// <summary> /// This method uses parts of http://stackoverflow.com/a/39929182/1580088. /// This event is called whenever a key is pressed down on a computer keyboard. We use this method /// to trigger application-wide hotkeys, most notably the Alt+Enter combination for /// toggling fullscreen mode. /// </summary> private static void HandleToggleKeyboardShortcut(Windows.UI.Core.CoreDispatcher sender, Windows.UI.Core.AcceleratorKeyEventArgs args) { if (args.EventType == CoreAcceleratorKeyEventType.SystemKeyDown) { // "menu key" is Alt, in Microsoft-speak. if (args.VirtualKey == Windows.System.VirtualKey.Enter && args.KeyStatus.IsMenuKeyDown) { SetFullScreenMode(!ApplicationView.GetForCurrentView().IsFullScreenMode); args.Handled = true; } } }
private void OnAcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs args) { if ((args.EventType == CoreAcceleratorKeyEventType.SystemKeyDown || args.EventType == CoreAcceleratorKeyEventType.KeyDown) && (args.VirtualKey == VirtualKey.Escape)) { if (!DetailFrame.CanGoBack || CurrentState != MasterDetailState.Narrow) return; DetailFrame.GoBack(); args.Handled = true; } }
void dispatcher_AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs args) { VirtualKey key = args.VirtualKey; if ((args.EventType == CoreAcceleratorKeyEventType.KeyDown)) { Unlock(); args.Handled = true; } }
/// <summary> /// Se invoca en cada pulsación de tecla, incluidas las teclas del sistema como combinaciones de teclas Alt, cuando /// esta página está activa y ocupa toda la ventana. Se usa para detectar la navegación con el teclado /// entre páginas incluso cuando la página no tiene el foco. /// </summary> /// <param name="sender">Instancia que desencadena el evento.</param> /// <param name="e">Datos de evento que describen las condiciones que dan lugar al evento.</param> private void CoreDispatcher_AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs e) { var virtualKey = e.VirtualKey; // Investigar más solo cuando se presionan las teclas Izquierda, Derecha o las teclas // dedicadas Repág o Avpág if ((e.EventType == CoreAcceleratorKeyEventType.SystemKeyDown || e.EventType == CoreAcceleratorKeyEventType.KeyDown) && (virtualKey == VirtualKey.Left || virtualKey == VirtualKey.Right || (int)virtualKey == 166 || (int)virtualKey == 167)) { var coreWindow = Window.Current.CoreWindow; var downState = CoreVirtualKeyStates.Down; bool menuKey = (coreWindow.GetKeyState(VirtualKey.Menu) & downState) == downState; bool controlKey = (coreWindow.GetKeyState(VirtualKey.Control) & downState) == downState; bool shiftKey = (coreWindow.GetKeyState(VirtualKey.Shift) & downState) == downState; bool noModifiers = !menuKey && !controlKey && !shiftKey; bool onlyAlt = menuKey && !controlKey && !shiftKey; if (((int)virtualKey == 166 && noModifiers) || (virtualKey == VirtualKey.Left && onlyAlt)) { // Cuando se presionan las teclas Repág o Alt+Izquierda, navegar hacia atrás e.Handled = true; this.GoBackCommand.Execute(null); } else if (((int)virtualKey == 167 && noModifiers) || (virtualKey == VirtualKey.Right && onlyAlt)) { // Cuando se presionan las teclas Avpág o Alt+Derecha, navegar hacia delante e.Handled = true; this.GoForwardCommand.Execute(null); } } }
/// <summary> /// Вызывается при каждом нажатии клавиши, включая системные клавиши, такие как клавиша ALT, если /// данная страница активна и занимает все окно. Используется для обнаружения навигации с помощью клавиатуры /// между страницами, даже если сама страница не имеет фокуса. /// </summary> /// <param name="sender">Экземпляр, инициировавший событие.</param> /// <param name="e">Данные события, описывающие условия, которые привели к возникновению события.</param> private void CoreDispatcher_AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs e) { var virtualKey = e.VirtualKey; // Дальнейшее изучение следует выполнять, только если нажата клавиша со стрелкой влево или вправо либо назначенная клавиша "Назад" или // нажаты if ((e.EventType == CoreAcceleratorKeyEventType.SystemKeyDown || e.EventType == CoreAcceleratorKeyEventType.KeyDown) && (virtualKey == VirtualKey.Left || virtualKey == VirtualKey.Right || (int)virtualKey == 166 || (int)virtualKey == 167)) { var coreWindow = Window.Current.CoreWindow; var downState = CoreVirtualKeyStates.Down; bool menuKey = (coreWindow.GetKeyState(VirtualKey.Menu) & downState) == downState; bool controlKey = (coreWindow.GetKeyState(VirtualKey.Control) & downState) == downState; bool shiftKey = (coreWindow.GetKeyState(VirtualKey.Shift) & downState) == downState; bool noModifiers = !menuKey && !controlKey && !shiftKey; bool onlyAlt = menuKey && !controlKey && !shiftKey; if (((int)virtualKey == 166 && noModifiers) || (virtualKey == VirtualKey.Left && onlyAlt)) { // Переход назад при нажатии клавиши "Назад" или сочетания клавиш ALT+СТРЕЛКА ВЛЕВО e.Handled = true; this.GoBackCommand.Execute(null); } else if (((int)virtualKey == 167 && noModifiers) || (virtualKey == VirtualKey.Right && onlyAlt)) { // Переход вперед при нажатии клавиши "Вперед" или сочетания клавиш ALT+СТРЕЛКА ВПРАВО e.Handled = true; this.GoForwardCommand.Execute(null); } } }
/// <summary> /// Invoqué à chaque séquence de touches, notamment les touches système comme les combinaisons utilisant la touche Alt, lorsque /// cette page est active et occupe la totalité de la fenêtre. Utilisé pour détecter la navigation à l'aide du clavier /// entre les pages, même lorsque la page elle-même n'a pas le focus. /// </summary> /// <param name="sender">Instance qui a déclenché l'événement.</param> /// <param name="e">Données d'événement décrivant les conditions ayant déclenché l'événement.</param> private void CoreDispatcher_AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs e) { var virtualKey = e.VirtualKey; // Approfondit les recherches uniquement lorsque les touches Gauche, Droite ou les touches Précédent et Suivant dédiées // sont actionnées if ((e.EventType == CoreAcceleratorKeyEventType.SystemKeyDown || e.EventType == CoreAcceleratorKeyEventType.KeyDown) && (virtualKey == VirtualKey.Left || virtualKey == VirtualKey.Right || (int)virtualKey == 166 || (int)virtualKey == 167)) { var coreWindow = Window.Current.CoreWindow; var downState = CoreVirtualKeyStates.Down; bool menuKey = (coreWindow.GetKeyState(VirtualKey.Menu) & downState) == downState; bool controlKey = (coreWindow.GetKeyState(VirtualKey.Control) & downState) == downState; bool shiftKey = (coreWindow.GetKeyState(VirtualKey.Shift) & downState) == downState; bool noModifiers = !menuKey && !controlKey && !shiftKey; bool onlyAlt = menuKey && !controlKey && !shiftKey; if (((int)virtualKey == 166 && noModifiers) || (virtualKey == VirtualKey.Left && onlyAlt)) { // Lorsque la touche Précédent ou les touches Alt+Gauche sont actionnées, navigue vers l'arrière e.Handled = true; this.GoBackCommand.Execute(null); } else if (((int)virtualKey == 167 && noModifiers) || (virtualKey == VirtualKey.Right && onlyAlt)) { // Lorsque la touche Suivant ou les touches Alt+Droite sont actionnées, navigue vers l'avant e.Handled = true; this.GoForwardCommand.Execute(null); } } }
/// <summary> /// 当此页处于活动状态并占用整个窗口时,在每次 /// 击键(包括系统键,如 Alt 组合键)时调用。 用于检测页之间的键盘 /// 导航(即使在页本身没有焦点时)。 /// </summary> /// <param name="sender">触发事件的实例。</param> /// <param name="e">描述导致事件的条件的事件数据。</param> private void CoreDispatcher_AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs e) { var virtualKey = e.VirtualKey; // 仅当按向左、向右或专用上一页或下一页键时才进一步 // 调查 if ((e.EventType == CoreAcceleratorKeyEventType.SystemKeyDown || e.EventType == CoreAcceleratorKeyEventType.KeyDown) && (virtualKey == VirtualKey.Left || virtualKey == VirtualKey.Right || (int)virtualKey == 166 || (int)virtualKey == 167)) { var coreWindow = Window.Current.CoreWindow; var downState = CoreVirtualKeyStates.Down; bool menuKey = (coreWindow.GetKeyState(VirtualKey.Menu) & downState) == downState; bool controlKey = (coreWindow.GetKeyState(VirtualKey.Control) & downState) == downState; bool shiftKey = (coreWindow.GetKeyState(VirtualKey.Shift) & downState) == downState; bool noModifiers = !menuKey && !controlKey && !shiftKey; bool onlyAlt = menuKey && !controlKey && !shiftKey; if (((int)virtualKey == 166 && noModifiers) || (virtualKey == VirtualKey.Left && onlyAlt)) { // 在按上一页键或 Alt+向左键时向后导航 e.Handled = true; this.GoBackCommand.Execute(null); } else if (((int)virtualKey == 167 && noModifiers) || (virtualKey == VirtualKey.Right && onlyAlt)) { // 在按下一页键或 Alt+向右键时向前导航 e.Handled = true; this.GoForwardCommand.Execute(null); } } }
/// <summary> /// Invoked on every keystroke, including system keys such as Alt key combinations, when /// this page is active and occupies the entire window. Used to detect keyboard back /// navigation via Alt+Left key combination. /// </summary> /// <param name="sender"></param> /// <param name="args"></param> void SettingsFlyout2_AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs args) { // Only investigate further when Left is pressed if (args.EventType == CoreAcceleratorKeyEventType.SystemKeyDown && args.VirtualKey == VirtualKey.Left) { var coreWindow = Window.Current.CoreWindow; var downState = CoreVirtualKeyStates.Down; // Check for modifier keys // The Menu VirtualKey signifies Alt bool menuKey = (coreWindow.GetKeyState(VirtualKey.Menu) & downState) == downState; bool controlKey = (coreWindow.GetKeyState(VirtualKey.Control) & downState) == downState; bool shiftKey = (coreWindow.GetKeyState(VirtualKey.Shift) & downState) == downState; if (menuKey && !controlKey && !shiftKey) { args.Handled = true; // If in second content layer, return to previous content // Otherwise, dismiss the SettingsFlyout if (this.isSecondContentLayer) { this.isSecondContentLayer = false; this.Content = this.content1; this.BackClick -= SettingsFlyout2_BackClick; } else { this.Hide(); } } } }
private void CoreDispatcher_AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs args) { throw new NotImplementedException(); }
/// <summary> /// 當這個頁面作用中且佔用整個視窗時,在按下每個按鍵時叫用, /// 包括如 Alt 鍵組合等系統按鍵。用來偵測頁面之間的鍵盤巡覽, /// 即使頁面本身沒有焦點。 /// </summary> /// <param name="sender">觸發事件的執行個體。</param> /// <param name="e">描述造成事件之狀況的事件資料。</param> private void CoreDispatcher_AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs e) { var virtualKey = e.VirtualKey; // 只在按下左、右或專用的 [上一頁] 或 [下一頁] 按鍵時才 // 進一步調查 if ((e.EventType == CoreAcceleratorKeyEventType.SystemKeyDown || e.EventType == CoreAcceleratorKeyEventType.KeyDown) && (virtualKey == VirtualKey.Left || virtualKey == VirtualKey.Right || (int)virtualKey == 166 || (int)virtualKey == 167)) { var coreWindow = Window.Current.CoreWindow; var downState = CoreVirtualKeyStates.Down; bool menuKey = (coreWindow.GetKeyState(VirtualKey.Menu) & downState) == downState; bool controlKey = (coreWindow.GetKeyState(VirtualKey.Control) & downState) == downState; bool shiftKey = (coreWindow.GetKeyState(VirtualKey.Shift) & downState) == downState; bool noModifiers = !menuKey && !controlKey && !shiftKey; bool onlyAlt = menuKey && !controlKey && !shiftKey; if (((int)virtualKey == 166 && noModifiers) || (virtualKey == VirtualKey.Left && onlyAlt)) { // 按下上一頁按鍵或 Alt+Left 時,向後巡覽 e.Handled = true; this.GoBackCommand.Execute(null); } else if (((int)virtualKey == 167 && noModifiers) || (virtualKey == VirtualKey.Right && onlyAlt)) { // 按下下一頁按鍵或 Alt+Right 時,向前巡覽 e.Handled = true; this.GoForwardCommand.Execute(null); } } }
private void OnAcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs args) { _page.OnKeyActivated(args); if (args.KeyStatus.IsKeyReleased) _page.OnKeyUp(args); if (args.Handled) return; var virtualKey = args.VirtualKey; if (args.KeyStatus.IsKeyReleased) { var isLeftOrRightKey = _page.UseAltLeftOrRightToNavigate && ( virtualKey == VirtualKey.Left || virtualKey == VirtualKey.Right || (int)virtualKey == 166 || (int)virtualKey == 167); var isBackKey = _page.UseBackKeyToNavigate && virtualKey == VirtualKey.Back; if (isLeftOrRightKey || isBackKey) { if (PopupHelper.IsPopupVisible) return; var element = FocusManager.GetFocusedElement(); if (element is FrameworkElement && PopupHelper.IsInPopup((FrameworkElement)element)) return; if (isBackKey) { if (!(element is TextBox) && !(element is PasswordBox) && (_page.UseBackKeyToNavigateInWebView || !(element is WebView)) && _page.Frame.CanGoBack) { args.Handled = true; TryGoBackAsync(); } } else { var altKey = Keyboard.IsAltKeyDown; var controlKey = Keyboard.IsControlKeyDown; var shiftKey = Keyboard.IsShiftKeyDown; var noModifiers = !altKey && !controlKey && !shiftKey; var onlyAlt = altKey && !controlKey && !shiftKey; if (((int)virtualKey == 166 && noModifiers) || (virtualKey == VirtualKey.Left && onlyAlt)) { args.Handled = true; TryGoBackAsync(); } else if (((int)virtualKey == 167 && noModifiers) || (virtualKey == VirtualKey.Right && onlyAlt)) { args.Handled = true; TryGoForwardAsync(); } } } } }
private void OnAcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs e) { Debug.WriteLine("AcceleratorKeyActivated|{0}| VKey: {1}| ScanCode: {2}| IsExtendedKey: {3}| IsKeyReleased: {4}| IsMenuKeyDown: {5}", e.EventType, e.VirtualKey, e.KeyStatus.ScanCode, e.KeyStatus.IsExtendedKey, e.KeyStatus.IsKeyReleased, e.KeyStatus.IsMenuKeyDown); }
/// <summary> /// このページがアクティブで、ウィンドウ全体を使用する場合、Alt キーの組み合わせなどのシステム キーを含む、 /// キーボード操作で呼び出されます。ページがフォーカスされていないときでも、 /// ページ間のキーボード ナビゲーションの検出に使用されます。 /// </summary> /// <param name="sender">イベントをトリガーしたインスタンス。</param> /// <param name="e">イベントが発生する条件を説明するイベント データ。</param> private void CoreDispatcher_AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs e) { var virtualKey = e.VirtualKey; // 左方向キーや右方向キー、または専用に設定した前に戻るキーや次に進むキーを押した場合のみ、 // 詳細を調査します if ((e.EventType == CoreAcceleratorKeyEventType.SystemKeyDown || e.EventType == CoreAcceleratorKeyEventType.KeyDown) && (virtualKey == VirtualKey.Left || virtualKey == VirtualKey.Right || (int)virtualKey == 166 || (int)virtualKey == 167)) { var coreWindow = Window.Current.CoreWindow; var downState = CoreVirtualKeyStates.Down; bool menuKey = (coreWindow.GetKeyState (VirtualKey.Menu) & downState) == downState; bool controlKey = (coreWindow.GetKeyState (VirtualKey.Control) & downState) == downState; bool shiftKey = (coreWindow.GetKeyState (VirtualKey.Shift) & downState) == downState; bool noModifiers = !menuKey && !controlKey && !shiftKey; bool onlyAlt = menuKey && !controlKey && !shiftKey; if (((int)virtualKey == 166 && noModifiers) || (virtualKey == VirtualKey.Left && onlyAlt)) { // 前に戻るキーまたは Alt キーを押しながら左方向キーを押すと前に戻ります e.Handled = true; this.GoBackCommand.Execute (null); } else if (((int)virtualKey == 167 && noModifiers) || (virtualKey == VirtualKey.Right && onlyAlt)) { // 次に進むキーまたは Alt キーを押しながら右方向キーを押すと次に進みます e.Handled = true; this.GoForwardCommand.Execute (null); } } }
protected virtual void OnKeyUp(AcceleratorKeyEventArgs args) { }
/// <summary> /// Invoked on every keystroke, including system keys such as Alt key combinations, when /// this page is active and occupies the entire window. Used to detect keyboard navigation /// between pages even when the page itself doesn't have focus. /// </summary> /// <param name="sender">Instance that triggered the event.</param> /// <param name="e">Event data describing the conditions that led to the event.</param> private void CoreDispatcher_AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs e) { var virtualKey = e.VirtualKey; // Only investigate further when Left, Right, or the dedicated Previous or Next keys // are pressed if ((e.EventType == CoreAcceleratorKeyEventType.SystemKeyDown || e.EventType == CoreAcceleratorKeyEventType.KeyDown) && (virtualKey == VirtualKey.Left || virtualKey == VirtualKey.Right || (int)virtualKey == 166 || (int)virtualKey == 167)) { var coreWindow = Window.Current.CoreWindow; var downState = CoreVirtualKeyStates.Down; bool menuKey = (coreWindow.GetKeyState(VirtualKey.Menu) & downState) == downState; bool controlKey = (coreWindow.GetKeyState(VirtualKey.Control) & downState) == downState; bool shiftKey = (coreWindow.GetKeyState(VirtualKey.Shift) & downState) == downState; bool noModifiers = !menuKey && !controlKey && !shiftKey; bool onlyAlt = menuKey && !controlKey && !shiftKey; if (((int)virtualKey == 166 && noModifiers) || (virtualKey == VirtualKey.Left && onlyAlt)) { // When the previous key or Alt+Left are pressed navigate back e.Handled = true; this.GoBackCommand.Execute(null); } else if (((int)virtualKey == 167 && noModifiers) || (virtualKey == VirtualKey.Right && onlyAlt)) { // When the next key or Alt+Right are pressed navigate forward e.Handled = true; this.GoForwardCommand.Execute(null); } } }
protected virtual void OnKeyActivated(AcceleratorKeyEventArgs args) { }