Я ударяю головой о том, что выглядит такой простой проблемой для исправления в wpf, но мне еще предстоит выяснить, почему я не могу заставить приложение вести себя в соответствии с моим планом.
У меня есть небольшое окно поиска, которое появляется в моем приложении wpf, когда пользователь нажимает ctrl + f. Все, что я хочу, это то, что каретка будет мигать внутри текстового поля окна поиска, готового принять любой пользовательский ввод, не нажимая на него пользователя. Вот код xaml для текстового поля, которое видимо, включено, доступно для проверки, tabstopable и focusable.
<TextBox x:Name="SearchCriteriaTextBox" Text="{Binding SearchCriteria}" Focusable="True" IsEnabled="True" IsTabStop="True" IsHitTestVisible="True" Style="{DynamicResource SearchTextBoxStyle}" Grid.Column="1" Margin="5,10,0,5" />
В коде позади я вызываю этот метод, когда влияет видимость окна поиска. окно поиска загружается в начале приложения.
/// <summary>
/// Handles events triggered from focusing on this view.
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="dependencyPropertyChangedEventArgs">The key event args.</param>
private void OnIsVisibleChanged(object sender, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
{
if (!((bool) dependencyPropertyChangedEventArgs.NewValue))
{
return;
}
SearchCriteriaTextBox.Focus();
Keyboard.Focus(SearchCriteriaTextBox);
SearchCriteriaTextBox.Select(0, 0);
if (SearchCriteriaTextBox.Text.Length > 0)
{
SearchCriteriaTextBox.SelectAll();
}
}
Проблема в том, что код вызывается, компонент становится IsFocused = true, но не получает фокус клавиатуры. Я что-то упускаю? Если другой контроль не держит дерзко в фокусе клавиатуры, который, я уверен, я не кодировал, почему этот кусок довольно простого кода не будет работать должным образом.