Когда вы пытаетесь установить Фокус на элемент, помимо перечисленных выше вещей нашей coleague, вы также должны знать, что WPF не разрешает кросс-поточные операции.
В некоторых случаях это исключение не вызывается, как в случае вызова метода Focus. Что я сделал, чтобы решить эту проблему, так это вызвал весь код, который включает в себя клавиатуры, в действии.
Это действие выполняется внутри диспетчера управления, чтобы убедиться, что мой код не выполняется из другого потока, кроме потока пользовательского интерфейса (например, событие таймера или событие, вызванное из другого потока):
[UIElement].Dispatcher.BeginInvoke(
new Action(
delegate{
/// put your Focus code here
}
)
);