2011-02-02 5 views
0

У меня есть TabControl с тремя элементами табуляции. Когда пользователь нажимает на второй элемент TabItem, я хочу вернуть его/ее обратно в первый TabItem и установить определенный TextBox для фокусировки клавиатуры, если выполняется определенное условие. У меня есть чертовски время, чтобы это произошло. Я могу легко установить текущий TabItem на первый, но независимо от того, что я пытаюсь, я не могу получить фокус клавиатуры в TextBox, который я хочу. Я попытался вызвать метод Focus в TextBox, и я попытался использовать метод Keyboard.Focus(). Ничто не работает.WPF - Задача TabControl

ответ

1

Используйте follwing код:

// Select here your tab 
// ... 
Dispatcher.BeginInvoke(new Action(delegate {  
    yourTextBox.Focus();   
}), System.Windows.Threading.DispatcherPriority.ContextIdle, null); 
+0

Это, кажется, работает. Можешь мне сказать почему? – Hosea146

+0

@Hosea 146: Если вы запускаете операцию через Диспетчер с аргументом ContextIdle, ваша операция будет выполнена после выполнения WPF всей важной работы, создания элементов шаблона, макетирования, рендеринга, обработки входных данных ... Поэтому ваша команда фокуса может достигать вашего текстового поля, и никакая другая операция не может быть удалена, если впоследствии. ContextIdle немного силен, вы также можете использовать значение с более высоким prio, но ContextIdle работает точно, поэтому я использую это значение в основном для ответов на сообщения. http://msdn.microsoft.com/en-us/library/ms591206.aspx – HCL