我正在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,但没有获得键盘焦点。我是不是遗漏了什么?除非另一个控件强烈地保持键盘焦点,我非常确定我没有编码,否则为什么这段相当简单的代码不能正常工作。
发布于 2012-12-19 23:31:35
作为一种解决办法,您可以尝试使用Dispatcher
在以后的DispatcherPriority (如Input
)中设置焦点
Dispatcher.BeginInvoke(DispatcherPriority.Input,
new Action(delegate() {
SearchCriteriaTextBox.Focus(); // Set Logical Focus
Keyboard.Focus(SearchCriteriaTextBox); // Set Keyboard Focus
}));
从您的问题描述来看,听起来您没有键盘焦点集。WPF可以有多个焦点作用域,因此多个元素可以有逻辑焦点(IsFocused = true
),但是只有一个元素可以有键盘焦点并接受键盘输入。
您发布的代码应该正确设置焦点,因此必须在之后进行某些操作以将键盘焦点移出您的TextBox
。通过将焦点设置为稍后的dispatcher优先级,您将确保在SearchCriteriaTextBox
上设置键盘焦点是最后完成的。
发布于 2019-09-29 13:34:03
基于瑞秋的解决方案,有一种更简单的方法。
在XAML中添加到TextBox Loaded="Got_Loaded“
在后台代码中
private void Got_Loaded(object sender, RoutedEventArgs e)
{
Keyboard.Focus(((TextBox)sender));
}
发布于 2017-09-04 22:36:26
如果这对任何人有帮助的话,我就遇到了这个问题,我的应用程序有一个主窗口,其中包含多个用户控件,这些控件通过可见性数据绑定放在不同的网格中。因为在构建应用程序时网格就在那里,所以在构建时调用.Focus(),或者在构建时调用构造函数,而不是在可见时调用。
无论如何,我通过在网格的MouseEnter事件上调用.Focus()来修复它。对我来说很好。
https://stackoverflow.com/questions/13955340
复制相似问题