WPF - Почему не работает Keyboard.Focus ()? - PullRequest
15 голосов
/ 02 февраля 2011

имеют элемент TextBox (MyTextBox) в элементе управления TabItem.У меня есть код, который выглядит следующим образом:

MyTextBox.Focus();
Keyboard.Focus(MyTextBox);

Когда я запускаю этот код через отладчик, я вижу следующее после выполнения строк:

MyTextBox.IsFocused = true
MyTextBox.IsKeyboardFocused = false

Может кто-нибудь сказать мне, почемутекстовое поле не получает фокус клавиатуры?Это просто стандартный элемент управления TextBox, который включен.

Ответы [ 4 ]

8 голосов
/ 05 сентября 2012

Когда вы пытаетесь установить Фокус на элемент, помимо перечисленных выше вещей нашей coleague, вы также должны знать, что WPF не разрешает кросс-поточные операции.

В некоторых случаях это исключение не вызывается, как в случае вызова метода Focus. Что я сделал, чтобы решить эту проблему, так это вызвал весь код, который включает в себя клавиатуры, в действии.

Это действие выполняется внутри диспетчера управления, чтобы убедиться, что мой код не выполняется из другого потока, кроме потока пользовательского интерфейса (например, событие таймера или событие, вызванное из другого потока):

[UIElement].Dispatcher.BeginInvoke(
      new Action(
         delegate{
             /// put your Focus code here
         }
      )
);
8 голосов
/ 02 февраля 2011

MyTextBox.IsKeyboardFocused неверно, потому что вы смотрите на него в отладчике, и фокус клавиатуры, вероятно, находится в вашей Visual Studio ... Попробуйте отладить фокус без точек останова (например, Debug.Write или трассировки тормозных точек), чтобы увидеть действительные значения MyTextBox.IsKeyboardFocused во время выполнения.

Также обратите внимание, что метод Focus() возвращает логическое значение, которое указывает, был ли фокус успешно установлен.Это возвращает False в вашем случае?Если да, я бы предложил перейти на метод Focus(), чтобы выяснить, что не так.

4 голосов
/ 19 декабря 2012

3 важных свойства должны быть true: IsVisible="True", Focusable="True". IsEnabled="True".

Чтобы быть фокусируемым, Focusable и IsEnabled должны быть истинными.

http://msdn.microsoft.com/en-us/library/system.windows.uielement.focus.aspx

1 голос
/ 17 марта 2015

Принятый ответ здесь не решает проблему текстовых полей, которые не получают фокус, независимо от того, что говорит вам отладчик. Если у вас есть и вы можете писать в текстовое поле, значит, оно ориентировано на клавиатуру.

Я нашел это здесь, решая проблему (и фактически получая фокус, не просто устанавливая значения, чтобы он выглядел как фокус в отладчике), он очень близок к ответу Павлова, но с «Кодом фокуса»: Клавиатура .Фокус не работает с текстовым полем в WPF

...