将焦点集中在 WPF 中的文本框上

如何在 WPF 中设置 TextBox元素的焦点

我有这个密码:

txtCompanyID.Focusable = true;
txtCompanyID.Focus();

但是没有用。

知道吗?

177517 次浏览

试试 元素

FocusManager.SetFocusedElement(parentElement, txtCompanyID)
txtCompanyID.Focusable = true;
Keyboard.Focus(txtCompanyID);

Msdn:

上只能有一个元素 有键盘焦点的整个桌面。 在 WPF 中,具有键盘的元素 Focus 将设置为 IsKeyboardFocus 真实。

您可以在设置行之后中断并检查 IsKeyboardFocused属性的值。还要检查你是否真的到达了那条线,或者你设置了其他的元素来获得焦点。

在 XAML 中:

<StackPanel FocusManager.FocusedElement="{Binding ElementName=Box}">
<TextBox Name="Box" />
</StackPanel>

试试这个: MyTextBox.Focus ( );

这些都不适合我,因为我使用的是网格而不是 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}" />

到目前为止还没有人解释为什么问题中的代码不能工作。我猜测代码被放置在 Window 的构造函数中。但现在确定焦点还为时过早。一旦窗口准备好进行交互,就必须这样做。代码的最佳位置是 Loadedevent:

public KonsoleWindow() {
public TestWindow() {
InitializeComponent();
Loaded += TestWindow_Loaded;
}


private void TestWindow_Loaded(object sender, RoutedEventArgs e) {
txtCompanyID.Focus();
}
}

另一种可能的解决方案是使用 免费的 DevExpress MVVM 框架提供的 焦点行为:

<TextBox Text="This control is focused on startup">
<dxmvvm:Interaction.Behaviors>
<dxmvvm:FocusBehavior/>
</dxmvvm:Interaction.Behaviors>
</TextBox>

它允许您在加载控件、引发某个事件或更改某个属性时聚焦该控件。

如果你还没有找到其他答案的解决方案,这就是我解决这个问题的方法。

Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
TEXTBOX_OBJECT.Focus();
}), System.Windows.Threading.DispatcherPriority.Render);

据我所知,其他解决方案可能不起作用,因为在应用程序呈现其他组件之前调用了对 Focus()的调用。

在代码后面,您只能通过这样做来实现它。

 private void Window_Loaded(object sender, RoutedEventArgs e)
{
txtIndex.Focusable = true;
txtIndex.Focus();
}

注意: 在加载窗口之前它不会工作