Сосредоточьтесь на TextBox, когда UserControl меняет видимость - PullRequest
17 голосов
/ 24 июня 2010

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

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

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

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

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

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

Ответы [ 3 ]

32 голосов
/ 25 июня 2010

Ну, я решаю таким образом:

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

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

1 голос
/ 24 июня 2010

попробовать

Keyboard.Focus(TextBlockInput);

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

0 голосов
/ 19 мая 2015

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

...