Подтвердить что ты не робот

Фокус на TextBox при изменении UserControl Видимость

У меня есть usercontrol, загруженный внутри холста; этот пользовательский контроль по умолчанию имеет видимость свернута. Когда конкретное текстовое поле моего окна сфокусировано, пользовательский контроль становится видимым.

Когда пользовательский контроль становится видимым, я хочу установить фокус на другое текстовое поле внутри usercontrol.

Я пытаюсь сделать это:

private void UserControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
        if (this.Visibility == Visibility.Visible)
        {                
            FocusManager.SetFocusedElement(this, TextBlockInput);
        }
}

Кажется, это работает, но есть проблема: текстовое поле кажется сфокусированным, но курсор в текстовое поле не мигает, и я не могу вводить символы для ввода.

Я бы хотел, чтобы после фокуса текстовое поле было готово для ввода. Как я могу сделать?

4b9b3361

Ответ 1

Ну, я решаю так:

private void UserControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
    if (this.Visibility == Visibility.Visible)
    {
        this.Dispatcher.BeginInvoke((Action)delegate
        {
            Keyboard.Focus(TextBlockInput);
        }, DispatcherPriority.Render);
    }
}

Я думаю, что проблема заключалась в вызове фокуса в "видимость" события IsVisibleChanged... правильно?

Ответ 2

попробовать

Keyboard.Focus(TextBlockInput);

см. здесь для более подробной информации

Ответ 3

Другое возможное обходное решение вместо Visibility использования свойства Opacity. В этом случае вызов Focus() фактически устанавливает фокус.