在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将键盘焦点设置在文本框上。
答案 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