【发布时间】:2015-07-20 12:34:17
【问题描述】:
在窗口加载后的 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 将键盘焦点设置在文本框上。
【问题讨论】:
-
我已经检查了这个链接。但我想知道有没有办法只使用 xaml 来做到这一点。否则我也可以使用 Keyboard.Focus 方法。
-
在同一个链接中已经提到了仅使用 xaml 设置焦点。请检查所有答案。
-
上面的链接显示了一种在不破坏 MVVM 模式的情况下实现此目的的方法。如果您想要一个纯 XAML 方法,您可以修改该示例以使用在窗口
Loaded事件上触发的事件触发器。