private void ChangeFocus(UIElement focus, DateTime timestamp)
        {
            if (focus != this._focus)
            {
                // Update the critical pieces of data.
                var oldFocus = this._focus;
                this._focus = focus;
                this._focusRootUIElement = focus?.RootUIElement;

                // Adjust the handlers we use to track everything.
                if (oldFocus != null)
                {
                    oldFocus.IsEnabledChanged -= this._isEnabledOrVisibleChangedEventHandler;
                    oldFocus.IsVisibleChanged -= this._isEnabledOrVisibleChangedEventHandler;
                }

                if (focus != null)
                {
                    focus.IsEnabledChanged += this._isEnabledOrVisibleChangedEventHandler;
                    focus.IsVisibleChanged += this._isEnabledOrVisibleChangedEventHandler;
                }

                // Send the LostFocus and GotFocus events.
                if (oldFocus != null)
                {
                    var lostFocus = new FocusChangedEventArgs(this, timestamp, oldFocus, focus)
                    {
                        RoutedEvent = Buttons.LostFocusEvent,
                        Source      = oldFocus
                    };

                    this._inputManager.ProcessInput(lostFocus);
                }

                if (focus != null)
                {
                    var gotFocus = new FocusChangedEventArgs(this, timestamp, oldFocus, focus)
                    {
                        RoutedEvent = Buttons.GotFocusEvent,
                        Source      = focus
                    };

                    this._inputManager.ProcessInput(gotFocus);
                }
            }
        }
        private void ChangeFocus(UIElement focus, DateTime timestamp)
        {
            if (focus == this._focus)
            {
                return;
            }
            UIElement focus1 = this._focus;

            this._focus = focus;
            this._focusRootUIElement = focus?.RootUIElement;
            if (focus1 != null)
            {
                focus1.IsEnabledChanged -= this._isEnabledOrVisibleChangedEventHandler;
                focus1.IsVisibleChanged -= this._isEnabledOrVisibleChangedEventHandler;
            }
            if (focus != null)
            {
                focus.IsEnabledChanged += this._isEnabledOrVisibleChangedEventHandler;
                focus.IsVisibleChanged += this._isEnabledOrVisibleChangedEventHandler;
            }
            if (focus1 != null)
            {
                FocusChangedEventArgs changedEventArgs = new FocusChangedEventArgs(this, timestamp, focus1, focus);
                changedEventArgs.RoutedEvent = Buttons.LostFocusEvent;
                changedEventArgs.Source      = (object)focus1;
                this._inputManager.ProcessInput((InputEventArgs)changedEventArgs);
            }
            if (focus == null)
            {
                return;
            }
            FocusChangedEventArgs changedEventArgs1 = new FocusChangedEventArgs(this, timestamp, focus1, focus);

            changedEventArgs1.RoutedEvent = Buttons.GotFocusEvent;
            changedEventArgs1.Source      = (object)focus;
            this._inputManager.ProcessInput((InputEventArgs)changedEventArgs1);
        }