我正在努力解决在 wpf 中看起来如此简单的问题,但我还没有发现为什么我不能让我的应用程序按照我的计划运行。
当用户按下 ctrl+f 时,我的 wpf 应用程序中会弹出一个小搜索框。我想要的只是插入符号在搜索框文本框中闪烁,准备好接受任何用户输入,而无需用户单击它。这是文本框的 xaml 代码,它是可见的、启用的、可点击测试的、可停止的和可聚焦的。
<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 但没有获得键盘焦点。我错过了什么吗?除非另一个控件猛烈地保持在我很确定我没有编码的键盘焦点上,否则为什么这段相当简单的代码将无法正常工作。