/// <summary>
        /// Adds a handler for the <see cref="E:Ultraviolet.Presentation.Input.GamePad.PreviewAxisChanged"/>
        /// attached event to the specified element.
        /// </summary>
        /// <param name="element">The element to which to add the handler.</param>
        /// <param name="handler">The handler to add to the specified element.</param>
        public static void AddPreviewAxisChangedHandler(DependencyObject element, UpfGamePadAxisChangedEventHandler handler)
        {
            Contract.Require(element, nameof(element));
            Contract.Require(handler, nameof(handler));

            IInputElementHelper.AddHandler(element, PreviewAxisChangedEvent, handler);
        }
        /// <summary>
        /// Removes a handler for the <see cref="E:Ultraviolet.Presentation.Input.GamePad.AxisDown"/>
        /// attached event from the specified element.
        /// </summary>
        /// <param name="element">The element from which to remove the handler.</param>
        /// <param name="handler">The handler to remove from the specified element.</param>
        public static void RemoveAxisUpHandler(DependencyObject element, UpfGamePadAxisChangedEventHandler handler)
        {
            Contract.Require(element, nameof(element));
            Contract.Require(handler, nameof(handler));

            IInputElementHelper.RemoveHandler(element, AxisDownEvent, handler);
        }
        /// <summary>
        /// Removes a handler for the <see cref="E:Ultraviolet.Presentation.Input.GamePad.ButtonUp"/>
        /// attached event from the specified element.
        /// </summary>
        /// <param name="element">The element from which to remove the handler.</param>
        /// <param name="handler">The handler to remove from the specified element.</param>
        public static void RemoveButtonUpHandler(DependencyObject element, UpfKeyboardFocusChangedEventHandler handler)
        {
            Contract.Require(element, nameof(element));
            Contract.Require(handler, nameof(handler));

            IInputElementHelper.RemoveHandler(element, ButtonUpEvent, handler);
        }
        /// <summary>
        /// Removes a handler for the <see cref="E:Ultraviolet.Presentation.Input.Keyboard.KeyUp"/>
        /// attached event from the specified element.
        /// </summary>
        /// <param name="element">The element from which to remove the handler.</param>
        /// <param name="handler">The handler to remove from the specified element.</param>
        public static void RemoveKeyUpHandler(DependencyObject element, UpfKeyEventHandler handler)
        {
            Contract.Require(element, nameof(element));
            Contract.Require(handler, nameof(handler));

            IInputElementHelper.RemoveHandler(element, KeyUpEvent, handler);
        }
        /// <summary>
        /// Removes a handler for the <see cref="E:Ultraviolet.Presentation.Input.Keyboard.TextEditing"/>
        /// attached event from the specified element.
        /// </summary>
        /// <param name="element">The element from which to remove the handler.</param>
        /// <param name="handler">The handler to remove from the specified element.</param>
        public static void RemoveTextEditingHandler(DependencyObject element, UpfKeyboardEventHandler handler)
        {
            Contract.Require(element, nameof(element));
            Contract.Require(handler, nameof(handler));

            IInputElementHelper.RemoveHandler(element, TextEditingEvent, handler);
        }
        /// <summary>
        /// Removes a handler for the <see cref="E:Ultraviolet.Presentation.Input.Keyboard.LostKeyboardFocus"/>
        /// attached event from the specified element.
        /// </summary>
        /// <param name="element">The element from which to remove the handler.</param>
        /// <param name="handler">The handler to remove from the specified element.</param>
        public static void RemoveLostKeyboardFocusHandler(DependencyObject element, UpfRoutedEventHandler handler)
        {
            Contract.Require(element, nameof(element));
            Contract.Require(handler, nameof(handler));

            IInputElementHelper.RemoveHandler(element, LostKeyboardFocusEvent, handler);
        }
        /// <summary>
        /// Adds a handler for the <see cref="E:Ultraviolet.Presentation.Input.Keyboard.KeyDown"/>
        /// attached event to the specified element.
        /// </summary>
        /// <param name="element">The element to which to add the handler.</param>
        /// <param name="handler">The handler to add to the specified element.</param>
        public static void AddKeyDownHandler(DependencyObject element, UpfKeyDownEventHandler handler)
        {
            Contract.Require(element, nameof(element));
            Contract.Require(handler, nameof(handler));

            IInputElementHelper.AddHandler(element, KeyDownEvent, handler);
        }
        /// <summary>
        /// Adds a handler for the <see cref="E:Ultraviolet.Presentation.Input.Keyboard.PreviewTextInput"/>
        /// attached event to the specified element.
        /// </summary>
        /// <param name="element">The element to which to add the handler.</param>
        /// <param name="handler">The handler to add to the specified element.</param>
        public static void AddPreviewTextInputHandler(DependencyObject element, UpfKeyboardEventHandler handler)
        {
            Contract.Require(element, nameof(element));
            Contract.Require(handler, nameof(handler));

            IInputElementHelper.AddHandler(element, PreviewTextInputEvent, handler);
        }