Фокус на TextBox при изменении UserControl Видимость
У меня есть usercontrol, загруженный внутри холста; этот пользовательский контроль по умолчанию имеет видимость свернута. Когда конкретное текстовое поле моего окна сфокусировано, пользовательский контроль становится видимым.
Когда пользовательский контроль становится видимым, я хочу установить фокус на другое текстовое поле внутри usercontrol.
Я пытаюсь сделать это:
private void UserControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if (this.Visibility == Visibility.Visible)
{
FocusManager.SetFocusedElement(this, TextBlockInput);
}
}
Кажется, это работает, но есть проблема: текстовое поле кажется сфокусированным, но курсор в текстовое поле не мигает, и я не могу вводить символы для ввода.
Я бы хотел, чтобы после фокуса текстовое поле было готово для ввода. Как я могу сделать?
Ответы
Ответ 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()
фактически устанавливает фокус.