/// <inheritdoc/> public void ProcessInput(RawInputEventArgs e) { _preProcess.OnNext(e); _process.OnNext(e); _postProcess.OnNext(e); }
private void ProcessRawEvent(RawInputEventArgs e) { IInputElement element = FocusedElement; if (element != null) { var keyInput = e as RawKeyEventArgs; if (keyInput != null) { switch (keyInput.Type) { case RawKeyEventType.KeyDown: case RawKeyEventType.KeyUp: var routedEvent = keyInput.Type == RawKeyEventType.KeyDown ? InputElement.KeyDownEvent : InputElement.KeyUpEvent; KeyEventArgs ev = new KeyEventArgs { RoutedEvent = routedEvent, Device = this, Key = keyInput.Key, Modifiers = keyInput.Modifiers, Source = element, }; IVisual currentHandler = element; while (currentHandler != null && !ev.Handled && keyInput.Type == RawKeyEventType.KeyDown) { var bindings = (currentHandler as IInputElement)?.KeyBindings; if(bindings!=null) foreach (var binding in bindings) { if(ev.Handled) break; binding.TryHandle(ev); } currentHandler = currentHandler.VisualParent; } element.RaiseEvent(ev); e.Handled = ev.Handled; break; } } var text = e as RawTextInputEventArgs; if (text != null) { var ev = new TextInputEventArgs() { Device = this, Text = text.Text, Source = element, RoutedEvent = InputElement.TextInputEvent }; element.RaiseEvent(ev); e.Handled = ev.Handled; } } }
/// <summary> /// Listens for non-client clicks and closes the menu when one is detected. /// </summary> /// <param name="e">The raw event.</param> private void ListenForNonClientClick(RawInputEventArgs e) { var mouse = e as RawMouseEventArgs; if (mouse?.Type == RawMouseEventType.NonClientLeftButtonDown) { Close(); } }