Kev*_*lia 16 c# wpf xaml textbox focus
所以假设我有一个带有几个文本框的WPF表单,如果你选中文本框并且它已经包含了一些内容,我想选择该框中的所有文本,这样输入就会删除该文本.如果您在框中单击鼠标,则可能意味着您想要在某处更改字母,因此在这种情况下不要突出显示所有字母.看起来很容易,但到目前为止,我找不到一个好的解决方案.到目前为止,我的工作非常接近工作,但并不完美.
<Style x:Key="TextBoxStyle" TargetType="TextBox">
<EventSetter Event="GotKeyboardFocus" Handler="EventSetter_OnHandler" />
</Style>
Run Code Online (Sandbox Code Playgroud)
private void EventSetter_OnHandler(object sender, RoutedEventArgs e)
{
TextBox txt = sender as TextBox;
if (txt != null) txt.SelectAll();
}
Run Code Online (Sandbox Code Playgroud)
因此,当盒子获得键盘焦点时,它会选择全部,因此在文本框中选项卡可以完美地选择所有文本.但是,如果鼠标单击此方法也会被调用,这也会突出显示文本,但是单击然后将光标放在鼠标单击后的位置.所以在功能上它是完美的,但它仍然困扰我,当鼠标点击时它闪烁选择一切.有没有更好的方法,或者在我的活动中进行某种检查,以便知道我通过鼠标点击而不是标签获得了键盘焦点?
H.B*_*.B. 22
到目前为止还没有看到任何干净的解决方案,你可以做的一件事就是检查鼠标状态:
var tb = (TextBox)sender;
if (Mouse.LeftButton != MouseButtonState.Pressed)
tb.SelectAll();
Run Code Online (Sandbox Code Playgroud)
但实际上有一种更好的方法,因为焦点在按键上移动,你可以检查键盘.我建议使用适当的签名GotKeyboardFocus处理程序来获取相应的event-args:
private void TextBox_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
if (e.KeyboardDevice.IsKeyDown(Key.Tab))
((TextBox)sender).SelectAll();
}
Run Code Online (Sandbox Code Playgroud)
此时,您可能仍会看到一些选择在单击时被清除,但这只是因为前一个选择仅在未聚焦时才会被隐藏.您可以随时清除选择LostKeyboardFocus以防止(例如((TextBox)sender).Select(0, 0)).