wpf使用xaml设置键盘焦点在文本框上

时间:2015-07-20 12:34:17

标签: wpf xaml

在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>

此代码设置焦点但光标不闪烁,我无法输入任何内容。

然后我遇到了这个问题Get and restore WPF keyboard focus,他解释说有两种类型的焦点,一种是逻辑焦点,另一种是键盘焦点和FocusManager.FocusedElement设置逻辑焦点而非键盘焦点。所以我不能眨眼光标。

使用背后的代码我可以使用

来解决这个问题
Keyboard.Focus(txtUserName);

但是我希望尽可能少地保留我的代码。所以请有人帮助我使用xaml将键盘焦点设置在文本框上。

1 个答案:

答案 0 :(得分:2)

根据@ 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