gpt4 book ai didi

c# - Keyboard.Focus 不适用于 WPF 中的文本框

转载 作者:IT王子 更新时间:2023-10-29 04:45:45 24 4
gpt4 key购买 nike

我正在努力解决在 wpf 中修复的看起来如此简单的问题,但我还没有发现为什么我无法让我的应用程序按照我的计划运行。

当用户按下 ctrl+f 时,我的 wpf 应用程序中会弹出一个小搜索框。我想要的只是让插入符号在搜索框文本框中闪烁,准备好接受任何用户输入而无需用户单击它。这是文本框的 xaml 代码,它是可见的、已启用的、可 HitTest 的、可停止的和可聚焦的。

   <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 但没有获得键盘焦点。我错过了什么吗?除非另一个控件凶猛地保持键盘焦点,我很确定我没有编写代码,否则为什么这段相当简单的代码不能正常工作。

最佳答案

作为解决方法,您可以尝试使用 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。通过将焦点设置在稍后的调度程序优先级,您将确保将键盘焦点设置到您的 SearchCriteriaTextBox 最后完成。

关于c# - Keyboard.Focus 不适用于 WPF 中的文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13955340/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com