Установить фокус на текстовое поле в WPF
Как установить фокус на TextBox
элемент в WPF
у меня есть этот код:
txtCompanyID.Focusable = true;
txtCompanyID.Focus();
...но это не работает.
есть идеи?
6 ответов:
в XAML:
<StackPanel FocusManager.FocusedElement="{Binding ElementName=Box}"> <TextBox Name="Box" /> </StackPanel>
попробовать FocusManager.SetFocusedElement
FocusManager.SetFocusedElement(parentElement, txtCompanyID)
до сих пор никто не объяснил, почему код в вопросе не работает. Я предполагаю, что код был помещен в конструктор окна. Но в это время еще слишком рано ставить фокус. Это должно быть сделано, как только окно готово к взаимодействию. Лучшим местом для кода является загруженное событие:
public KonsoleWindow() { public TestWindow() { InitializeComponent(); Loaded += TestWindow_Loaded; } private void TestWindow_Loaded(object sender, RoutedEventArgs e) { txtCompanyID.Focus(); } }
txtCompanyID.Focusable = true; Keyboard.Focus(txtCompanyID);
msdn:
там может быть только один элемент весь рабочий стол, который имеет фокус клавиатуры. В WPF элемент, который имеет клавиатуру фокус будет иметь IsKeyboardFocused набор к истине.
вы можете сломать после строки настройки и проверить значение
IsKeyboardFocused
собственность. Также проверьте, действительно ли вы достигли этой линии или, возможно, вы установили какой-то другой элемент, чтобы получить Фокус после этого.
ничего из этого не работало для меня, поскольку я использовал сетку, а не StackPanel.
Я наконец нашел этот пример: http://spin.atomicobject.com/2013/03/06/xaml-wpf-textbox-focus/
и изменил его на это:
В разделе "Ресурсы":
<Style x:Key="FocusTextBox" TargetType="Grid"> <Style.Triggers> <DataTrigger Binding="{Binding ElementName=textBoxName, Path=IsVisible}" Value="True"> <Setter Property="FocusManager.FocusedElement" Value="{Binding ElementName=textBoxName}"/> </DataTrigger> </Style.Triggers> </Style>
в моем определении сетки:
<Grid Style="{StaticResource FocusTextBox}" />