У меня есть TabControl с тремя элементами табуляции. Когда пользователь нажимает на второй элемент TabItem, я хочу вернуть его/ее обратно в первый TabItem и установить определенный TextBox для фокусировки клавиатуры, если выполняется определенное условие. У меня есть чертовски время, чтобы это произошло. Я могу легко установить текущий TabItem на первый, но независимо от того, что я пытаюсь, я не могу получить фокус клавиатуры в TextBox, который я хочу. Я попытался вызвать метод Focus в TextBox, и я попытался использовать метод Keyboard.Focus(). Ничто не работает.WPF - Задача TabControl
0
A
ответ
1
Используйте follwing код:
// Select here your tab
// ...
Dispatcher.BeginInvoke(new Action(delegate {
yourTextBox.Focus();
}), System.Windows.Threading.DispatcherPriority.ContextIdle, null);
Это, кажется, работает. Можешь мне сказать почему? – Hosea146
@Hosea 146: Если вы запускаете операцию через Диспетчер с аргументом ContextIdle, ваша операция будет выполнена после выполнения WPF всей важной работы, создания элементов шаблона, макетирования, рендеринга, обработки входных данных ... Поэтому ваша команда фокуса может достигать вашего текстового поля, и никакая другая операция не может быть удалена, если впоследствии. ContextIdle немного силен, вы также можете использовать значение с более высоким prio, но ContextIdle работает точно, поэтому я использую это значение в основном для ответов на сообщения. http://msdn.microsoft.com/en-us/library/ms591206.aspx – HCL