假设我有一个WPF表单和几个文本框。如果您切换到文本框并且文本框中已经有一些内容,我想选择该框中的所有文本,这样打字将擦除该文本。如果您单击鼠标在框中,则可能意味着您想更改某个字母,因此在这种情况下不要突出显示所有内容。似乎很容易,但是目前为止没有一个好的解决方案。以下是我现在已经非常接近的解决方案,但还不完美。
<Style x:Key="TextBoxStyle" TargetType="TextBox">
<EventSetter Event="GotKeyboardFocus" Handler="EventSetter_OnHandler" />
</Style>
private void EventSetter_OnHandler(object sender, RoutedEventArgs e)
{
TextBox txt = sender as TextBox;
if (txt != null) txt.SelectAll();
}
因此,当该框获得键盘焦点时,它会选择所有内容,因此通过制表符到达文本框会完美地选择所有文本。但是,如果使用鼠标单击,也会调用此方法,这也会高亮显示文本,但单击后鼠标会把光标放在单击位置之后。因此,这个功能上是完美的,但仍然让我感到困扰的是,当鼠标点击时,它会闪烁并选择所有内容。是否有更好的方法来完成此操作,或者在我的事件中加入某种检查,以知道我是通过鼠标单击而不是制表符获得了键盘焦点?
e.Device
也可以是一个MouseDevice
,但是根据参数的名称,它只能是键盘,如果有一个if (e.Device is KeyboardDevice)
的检查就好了。 - H.B.KeyboardFocusChangedEventArgs
工作的,对我而言,我使用的是RoutedEventArgs
。在这种情况下,我使用了if (Keyboard.IsKeyDown(Key.Tab))
,它起作用了。点赞! - Chris RayGotFocus
,我的处理程序名称有误导性,我订阅了GotKeyboardFocus
,它具有KeyboardFocusChangedEventArgs
。 - H.B.