Я предпочитаю этот подход другим выше, так как он соответствует MVVM.
Тодд Спранг,
1
Сфокусированный элемент правильно только для чтения Как вы можете установить в xaml? Я использовал это, и это не сработало <Style.Triggers> <Trigger Property = "Validation.HasError" Value = "True"> <Setter Property = "FocusManager.FocusedElement" Value = "{Binding Source = {RelativeSource Self}}" /> </Trigger> </Style.Triggers>
WPFKK
@ user841612, проверьте следующую ссылку и проверьте сборку
полезноBee
Это работает только один раз. Если вы хотите изменить фокус после того, как страница была построена, вам нужно сделать это программно.
Джо Стил
это тоже работает. txtCompanyID.Focusable = true; Keyboard.Focus (txtCompanyID);
MindRoasterMir
51
Пока никто не объяснил, почему код в вопросе не работает. Я предполагаю, что код был помещен в конструктор Window. Но пока рано расставлять акценты. Это нужно сделать, когда окно будет готово к взаимодействию. Лучшее место для кода - событие Loaded:
На всем рабочем столе может быть только один элемент с фокусом клавиатуры. В WPF для элемента с фокусом клавиатуры IsKeyboardFocused будет установлено значение true.
Вы можете прервать линию настройки и проверить значение IsKeyboardFocusedсвойства. Также проверьте, действительно ли вы достигли этой линии или, возможно, вы установили какой-то другой элемент, чтобы после этого фокусироваться.
Это сработало и для меня. Остального не было. Спасибо за ссылку, было довольно интересно. Также интересно, что такая простая вещь может быть такой сложной.
TravisWhidden 01
2
Приведенный выше ответ отлично работает независимо от того, является ли контейнер Gird или StackPanel. Поскольку структура вашей сетки не ясна, трудно сказать, что могло пойти не так. Однако приятно видеть альтернативы.
полезноBee
1
По мне, это тоже единственный, который правильно работает. Хороший способ.
OregonGhost
7
Если вы не нашли решения по другим ответам, вот как я решил проблему.
Ответы:
В XAML:
источник
Пока никто не объяснил, почему код в вопросе не работает. Я предполагаю, что код был помещен в конструктор Window. Но пока рано расставлять акценты. Это нужно сделать, когда окно будет готово к взаимодействию. Лучшее место для кода - событие Loaded:
источник
Focus()
требуется параметр состояния фокуса - напримерtxtCompanyId.Focus(FocusState.Keyboard)
попробуйте FocusManager.SetFocusedElement
источник
msdn:
Вы можете прервать линию настройки и проверить значение
IsKeyboardFocused
свойства. Также проверьте, действительно ли вы достигли этой линии или, возможно, вы установили какой-то другой элемент, чтобы после этого фокусироваться.источник
Попробуй это :
MyTextBox.Focus ( );
источник
У меня ничего из этого не сработало, поскольку я использовал сетку, а не StackPanel.
Я наконец нашел этот пример: http://spin.atomicobject.com/2013/03/06/xaml-wpf-textbox-focus/
и изменил его на это:
В разделе "Ресурсы":
В моем определении сетки:
источник
Если вы не нашли решения по другим ответам, вот как я решил проблему.
Насколько я понимаю, другие решения могут не работать, потому что вызов
Focus()
вызывается до того, как приложение отобразит другие компоненты.источник
Другое возможное решение - использовать FocusBehavior, предоставляемый бесплатной DevExpress MVVM Framework :
Он позволяет сфокусировать элемент управления при его загрузке, при возникновении определенного события или изменении свойства.
источник
В коде позади вы можете добиться этого, только сделав это.
Примечание: он не будет работать до загрузки окна
источник