WPF如何使用XAML设置文本框的键盘焦点

4

在一个WPF项目中,窗口加载后我试图使用XAML将焦点设置在文本框上。

我的文本框位于一个网格内。以下是我使用的代码:

<Grid Name="gvLoginPage"
      Margin="0,30,0,0"
      FocusManager.FocusedElement="{Binding ElementName=txtUserName}">
 <TextBox Name="txtUserName"
          Focusable="True"
          ToolTip="Please enter your user name"
          Width="300"
          Height="22"
          VerticalContentAlignment="Top"
          TextWrapping="Wrap"
          Grid.Row="0"
          Grid.Column="1"
          BorderBrush="Black">
<Grid>

这段代码设置了焦点,但是光标没有闪烁,我无法输入任何内容。

后来我遇到了这个问题 获取并恢复WPF键盘焦点 ,其中他解释了有两种焦点,一种是逻辑焦点,另一种是键盘焦点,而 FocusManager.FocusedElement 设置的是逻辑焦点,而不是键盘焦点。因此,我无法得到闪烁的光标。

使用代码解决这个问题:

Keyboard.Focus(txtUserName);

但我希望我的代码尽可能少,因此请有人帮助我使用XAML设置文本框的键盘焦点。

https://dev59.com/w2Ik5IYBdhLWcg3wfOOe - Palak.Maheria
我已经检查了这个链接,但我想知道是否有一种只使用XAML的方法来实现它。否则,我也可以使用Keyboard.Focus方法。 - shreesha
仅使用XAML设置焦点已在同一链接中提到。请检查所有答案。 - Palak.Maheria
上面的链接展示了一种在不破坏MVVM模式的情况下实现此目的的方法。如果您想要一个纯XAML方法,您可以将该示例改为使用在窗口“Loaded”事件上触发的事件触发器。 - olitee
1个回答

6

根据 @olitee 的评论,我使用了我的gridview的 IsVisible 属性来触发一个 DataTrigger 并将 Focusmanager.FocusedElement 设置为我的 Textbox。以下是代码:

<Style x:Key="trgFocus" TargetType="TextBox">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=gvLoginPage, Path=IsVisible}" Value="true">
                    <Setter Property="FocusManager.FocusedElement" Value="{Binding ElementName=txtUserName}" />
                </DataTrigger>

            </Style.Triggers>

现在我得到了闪烁的光标。感谢 @olitee 和 @Palak。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接