WPF – Focus auf TextBox wird nicht gesetzt

Veröffentlicht von

Manchmal sind es die kleinen Dinge, welche Probleme verursachen. Z.B. einen Focus auf eine Textbox in einem WPF-Window zu setzen, nach dem das Fenster geöffnet worden ist.

Ich hatte verschiedene Ansätze ausprobiert, FocusManager, Focus-Methode oder auch Keyboard.Focus.

private void WpfBaseFieldDialog_Loaded(object sender, RoutedEventArgs e)
{
    StandardFieldsComponent.TextBoxLabel.Focus();
    Keyboard.Focus(StandardFieldsComponent.TextBoxLabel);
}

Das Problem:

Wie man sieht ist der Cursor hier zwar gesetzt, aber das Feld hat keinen richtigen Focus. Man kann nicht direkt lostippen. Es fehlt der “blaue Rand” um das Element, dass es auch wirklich den Focus hat.

Interessanterweise funktioniert das Setzen des Fokus nach dem Öffnen des Formulars. Vermutlich mache ich etwas verkehrt. Aber in jedem Fall habe ich eine kleine Klasse geschrieben, welche den Fokus nach einer kurzen Zeit setzt:

public class FocusUtil
{
    /// <summary>
    /// Focus an element after the given time
    /// </summary>
    /// <param name="element"></param>
    /// <param name="time"></param>
    public static void FocusElement(IInputElement element, int time = 250)
    {
        var timer = new DispatcherTimer { Interval = TimeSpan.FromMilliseconds(time) };
        timer.Tick += (sender, args) =>
        {
            element.Focus();
            timer.Stop();
            timer = null;
        };
        timer.Start();
    }
}
}

Der anschließende Aufruf:

FocusUtil.FocusElement(StandardFieldsComponent.TextBoxLabel);

Standardmäßig wird eine Verzögerung von 250ms verwendet. Anschließend wird der Fokus richtig gesetzt. Eine sichtbare Verzögerung gibt es nicht.

Wie man am folgenden Screenshot sieht, wird das Feld nun blau umrandet und der Anwender kann direkt lostippen.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert