WPF TextBox点击时全选内容失效问题求助
WPF TextBox点击(触摸)时全选内容的解决方案
问题说明
需实现WPF TextBox在鼠标点击(实际场景为触摸屏触摸)时自动全选所有内容,尝试多种方案(如OnGotFocus、OnGotKeyboardFocus)均无效,测试项目核心代码如下。
修复方案
修改ExtendedTextBox类的事件处理逻辑,核心是覆盖TextBox默认的光标定位行为,确保SelectAll操作生效。修正后的完整代码:
using System.Windows; using System.Windows.Controls; using System.Windows.Input; namespace CustomTextBox { public class ExtendedTextBox : TextBox { protected override void OnKeyDown(KeyEventArgs e) { base.OnKeyDown(e); if (e.Key == Key.Enter) { GetBindingExpression(TextProperty)?.UpdateSource(); } } protected override void OnMouseDown(MouseButtonEventArgs e) { // 先获取焦点并全选,阻止默认光标定位行为 if (!IsFocused) { Focus(); e.Handled = true; SelectAll(); } base.OnMouseDown(e); } // 兼容键盘获取焦点的场景,确保全选 protected override void OnGotKeyboardFocus(KeyboardFocusChangedEventArgs e) { base.OnGotKeyboardFocus(e); SelectAll(); } } }
原因解释
原方案失效的核心原因:
OnGotFocus执行后,TextBox默认的MouseDown事件会重新定位光标,覆盖全选状态OnMouseUp触发时,默认光标定位已完成,此时调用SelectAll无法覆盖原有操作- 通过在
OnMouseDown中标记事件为已处理(e.Handled = true),可阻断TextBox默认的光标定位逻辑,确保全选结果保留
内容的提问来源于stack exchange,提问作者Fedor Yudin
相关产品推荐
相关产品推荐

