Poner en cola WPF y reproducir eventos clave

Estoy tratando de mejorar la capacidad de respuesta de una aplicación empresarial WPF para que cuando los usuarios estén "entre" pantallas esperando a que aparezca una nueva pantalla después de una respuesta del servidor, aún puedan ingresar datos. Soy capaz de poner en cola los eventos (usando un controlador de eventos PreviewKeyDown en el panel de fondo) pero luego estoy teniendo dificultades para lanzar los eventos que extraigo en el nuevo panel una vez que está cargado. En particular, los cuadros de texto en el nuevo panel no están recogiendo el texto. He intentado elevar los mismos eventos (configuración Manejado a verdadero al capturarlos, configuración Manejado a falso cuando se crían de nuevo) creando nuevos eventos KeyDown, nuevos eventos PreviewKeyDown, haciendo ProcessInput, haciendo RaiseEvent en el panel, configurando el foco a la derecha TextBox y haciendo RaiseEvent en el TextBox, muchas cosas.

Parece que debería serrealmente simple, pero no puedo entenderlo.

Estas son algunas de las cosas que he probado. Considere una cola de KeyEventArgs llamada EventQ:

Aquí hay una cosa que no funciona:

        while (EventQ.Count > 0)
        {
            KeyEventArgs kea = EventQ.Dequeue();
            tbOne.Focus(); // tbOne is a text box
            kea.Handled = false;
            this.RaiseEvent(kea);
        }

Aquí está otro:

        while (EventQ.Count > 0)
        {
            KeyEventArgs kea = EventQ.Dequeue();
            tbOne.Focus(); // tbOne is a text box
            var key = kea.Key;                    // Key to send
            var routedEvent = Keyboard.PreviewKeyDownEvent; // Event to send
            KeyEventArgs keanew = new KeyEventArgs(
                Keyboard.PrimaryDevice,
                PresentationSource.FromVisual(this),
                0,
                key) { RoutedEvent = routedEvent, Handled = false };

            InputManager.Current.ProcessInput(keanew);
        }

Y otro:

        while (EventQ.Count > 0)
        {
            KeyEventArgs kea = EventQ.Dequeue();
            tbOne.Focus(); // tbOne is a text box
            var key = kea.Key;                    // Key to send
            var routedEvent = Keyboard.PreviewKeyDownEvent; // Event to send
            this.RaiseEvent(
              new KeyEventArgs(
                Keyboard.PrimaryDevice,
                PresentationSource.FromVisual(this),
                0,
                key) { RoutedEvent = routedEvent, Handled = false }
            );
        }

Una cosa extraña que he notado es que al usar el método InputManager (# 2) aparecen espacios. Pero las teclas de texto normales no lo hacen.

Respuestas a la pregunta(3)

Su respuesta a la pregunta